CN112667600A - 一种redis与MySQL结合的库存解决方法 - Google Patents
一种redis与MySQL结合的库存解决方法 Download PDFInfo
- Publication number
- CN112667600A CN112667600A CN202011587255.4A CN202011587255A CN112667600A CN 112667600 A CN112667600 A CN 112667600A CN 202011587255 A CN202011587255 A CN 202011587255A CN 112667600 A CN112667600 A CN 112667600A
- Authority
- CN
- China
- Prior art keywords
- inventory
- redis
- deduction
- database
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种redis与MySQL结合的库存解决方法,包括以下步骤:S1、前台客户进行购买操作,订单中心调用操作库存的命令;S2、库存管理模块接到库存扣减指令后,数据库管理模块将需扣减值写入到MySQL数据库与redis数据库中;S3、库存管理模块利用MySQL数据库与redis数据库进行是否进行扣减的判断;S4、判断符扣减条件则通过MySQL数据库直接进行扣减;S5、若不符合扣减条件则重复步骤S1‑S4。本发明所述的方法将redis技术引入库存的操作中,对于库存使用过程中的特点,尤其是频繁的查询操作,能够发挥出redis的巨大优势;在新建库存时即将库存值放入redis,不设置过期时间,在前台页面进行库存查询时,直接进行redis的查询操作,大大提升了库存查询的并发性能与速度。
Description
技术领域
本发明属于计算机软件技术领域,尤其是涉及一种redis与MySQL结合的库存解决方法。
背景技术
目前解决库存扣减的方案主要是通过后端关系型数据库进行库存的操作,当前台客户进行购买操作时订单中心调用操作库存的命令,库存管理模块通过后端数据库查询数据库中要操作的库存当前值,与订单中心传过来的需扣减值对比,当库存当前值大于等于需扣减值则进行库存的扣减操作,若库存当前值小于需扣减值则接口返回;若能则进行后续的操作,通过数据库的更新(update)命令更新数据库中库存的值,成功后则返回结果。
不足之处:
1、在进行库存操作之前进行了查询操作,无法保证数据的一致性;
2、完全依赖关系型数据库无法保证操作的并发性,尤其是在查询库存时,关系型数据库速度慢,无法满足高并发情况下的并发查询操作,容易造成后端数据库的崩溃。
发明内容
有鉴于此,本发明旨在提出一种redis与MySQL结合的库存解决方法,以解决频繁查询库存操作速度缓慢并给后端MySQL数据库造成较大压力,以及在高并发的库存扣减情况下,数据一致性的保证。
为达到上述目的,本发明的技术方案是这样实现的:
一种redis与MySQL结合的库存解决方法,包括以下步骤:
S1、前台客户进行购买操作,订单中心调用操作库存的命令;
S2、库存管理模块接到库存扣减指令后,数据库管理模块将需扣减值写入到MySQL数据库与redis数据库中;
S3、库存管理模块利用MySQL数据库与redis数据库进行是否进行扣减的判断;
S4、判断符扣减条件则通过MySQL数据库直接进行扣减;
S5、若不符合扣减条件则重复步骤S1-S4。
进一步的,所述步骤S3中MySQL数据库与redis数据库进行是否进行扣减的判断过程如下:
库存管理模块将需扣减值写入到SQL语句中,通过SQL语句进行条件判断,并且库存管理模块将需扣减值与redis数据库中key值利用脚本文件进行比较,判断是否符合脚本,两者条件均符合则进行扣减操作,若有其中一个条件不符合则返回至原有数据。
进一步的,所述步骤S3中redis数据库进行扣减判断的过程如下:
库存管理模块将需要扣减的库存值以及该库存在redis中的key值写入LUA脚本,通过库存管理模块调用redis执行LUA脚本接口,发送LUA脚本到redis服务器后,redis识别脚本中的代码,先找到redis中的该库存的key值,与传入的库存扣减值进行比较,若满足库存值大于等于库存扣减值则启动MySQL数据库进行扣减,若不满足则返回原值。
进一步的,所述步骤S4中扣减过程如下:
前台用户下单过程中订单中心发起调用库存管理模块扣减库存操作,库存管理模块接到库存扣减指令后,直接通过MySQL的UPDATE命令将需要扣减的库存值写入SQL语句的WHERE条件中,由MySQL进行库存扣减的条件判断,当数据库中当前库存满足WHERE条件中的判断条件时即可执行UPDATE语句,实现库存扣减。
相对于现有技术,本发明所述的一种redis与MySQL结合的库存解决方法具有以下优势:
(1)本发明所述的解决方法在服务器与后端数据库中间引入redis缓存层,将访问量较多的库存数据进行redis缓存,分担了后端主数据库的压力,提升了系统健壮性;
(2)本发明所述的解决方法通过使用后端主数据库事务与redis缓存更新相结合,保证了库存数据的正确性与完整性;
(3)本发明所述的解决方法利用redis执行lua脚本具有原子性的特性,保证了更新redis时数据的正确性,消除了并发干扰,保证了缓存层的数据一致。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例所述的现有技术解决方案流程图;
图2为本发明实施例所述的一种redis与MySQL结合的库存解决方法流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明中的具体含义。
下面将参考附图并结合实施例来详细说明本发明。
如图2所示,一种redis与MySQL结合的库存解决方法,包括以下步骤:
S1、前台客户进行购买操作,订单中心调用操作库存的命令;
S2、库存管理模块接到库存扣减指令后,数据库管理模块将需扣减值写入到MySQL数据库与redis数据库中;
S3、库存管理模块利用MySQL数据库与redis数据库进行是否进行扣减的判断;
S4、判断符扣减条件则通过MySQL数据库直接进行扣减;
S5、若不符合扣减条件则重复步骤S1-S4。
所述步骤S3中MySQL数据库与redis数据库进行是否进行扣减的判断过程如下:
库存管理模块将需扣减值写入到SQL语句中,通过SQL语句进行条件判断,并且库存管理模块将需扣减值与redis数据库中key值利用脚本文件进行比较,判断是否符合脚本,两者条件均符合则进行扣减操作,若有其中一个条件不符合则返回至原有数据。
所述步骤S3中redis数据库进行扣减判断的过程如下:
库存管理模块将需要扣减的库存值以及该库存在redis中的key值写入LUA脚本,通过库存管理模块调用redis执行LUA脚本接口,发送LUA脚本到redis服务器后,redis识别脚本中的代码,先找到redis中的该库存的key值,与传入的库存扣减值进行比较,若满足库存值大于等于库存扣减值则启动MySQL数据库进行扣减,若不满足则返回原值。
所述步骤S4中扣减过程如下:
前台用户下单过程中订单中心发起调用库存管理模块扣减库存操作,库存管理模块接到库存扣减指令后,直接通过MySQL的UPDATE命令将需要扣减的库存值写入SQL语句的WHERE条件中,由MySQL进行库存扣减的条件判断,当数据库中当前库存满足WHERE条件中的判断条件时即可执行UPDATE语句,实现库存扣减。
具体过程如下:
前台用户下单过程中订单中心发起调用库存管理模块扣减库存操作,库存管理模块接到库存扣减指令后,直接通过MySQL的UPDATE命令将需要扣减的库存值写入SQL语句的WHERE条件中,由MySQL进行库存扣减的条件判断,当数据库中当前库存满足WHERE条件中的判断条件时即可执行UPDATE语句,实现库存扣减,由现有技术地先通过MySQL查询结果至库存管理模块内存中,通过JAVA程序进行库存扣减条件判断转移至MySQL数据库中进行扣减条件判断,变为使用MySQL的特性保证数据一致性;MySQL扣减库存成功后,由JAVA程序发起redis缓存层的库存扣减操作,将需要扣减的库存值以及该库存在redis中的key值写入LUA脚本,通过JAVA程序调用redis执行LUA脚本接口,发送LUA脚本到redis服务器后,redis识别脚本中的代码,先找到redis中的该库存的key值,与传入的库存扣减值进行比较,若满足库存值大于等于库存扣减值则进行扣减,该过程由于redis的单线程特性以及执行LUA脚本的连续性能够保证在并发情况下的数据一致性。上述整体流程包含在一个MySQL事务中,任务地方发生错误均能回退,保证MySQL与redis中的库存一致性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种redis与MySQL结合的库存解决方法,其特征在于包括以下步骤:
S1、前台客户进行购买操作,订单中心调用操作库存的命令;
S2、库存管理模块接到库存扣减指令后,数据库管理模块将需扣减值写入到MySQL数据库与redis数据库中;
S3、库存管理模块利用MySQL数据库与redis数据库进行是否进行扣减的判断;
S4、判断符扣减条件则通过MySQL数据库直接进行扣减;
S5、若不符合扣减条件则重复步骤S1-S4。
2.根据权利要求1所述的一种redis与MySQL结合的库存解决方法,其特征在于:所述步骤S3中MySQL数据库与redis数据库进行是否进行扣减的判断过程如下:
库存管理模块将需扣减值写入到SQL语句中,通过SQL语句进行条件判断,并且库存管理模块将需扣减值与redis数据库中key值利用脚本文件进行比较,判断是否符合脚本,两者条件均符合则进行扣减操作,若有其中一个条件不符合则返回至原有数据。
3.根据权利要求1所述的一种redis与MySQL结合的库存解决方法,其特征在于:所述步骤S3中redis数据库进行扣减判断的过程如下:
库存管理模块将需要扣减的库存值以及该库存在redis中的key值写入LUA脚本,通过库存管理模块调用redis执行LUA脚本接口,发送LUA脚本到redis服务器后,redis识别脚本中的代码,先找到redis中的该库存的key值,与传入的库存扣减值进行比较,若满足库存值大于等于库存扣减值则启动MySQL数据库进行扣减,若不满足则返回原值。
4.根据权利要求1所述的一种redis与MySQL结合的库存解决方法,其特征在于:所述步骤S4中扣减过程如下:
前台用户下单过程中订单中心发起调用库存管理模块扣减库存操作,库存管理模块接到库存扣减指令后,直接通过MySQL的UPDATE命令将需要扣减的库存值写入SQL语句的WHERE条件中,由MySQL进行库存扣减的条件判断,当数据库中当前库存满足WHERE条件中的判断条件时即可执行UPDATE语句,实现库存扣减。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011587255.4A CN112667600A (zh) | 2020-12-28 | 2020-12-28 | 一种redis与MySQL结合的库存解决方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011587255.4A CN112667600A (zh) | 2020-12-28 | 2020-12-28 | 一种redis与MySQL结合的库存解决方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112667600A true CN112667600A (zh) | 2021-04-16 |
Family
ID=75411557
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011587255.4A Pending CN112667600A (zh) | 2020-12-28 | 2020-12-28 | 一种redis与MySQL结合的库存解决方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112667600A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113778697A (zh) * | 2021-09-14 | 2021-12-10 | 福建天晴数码有限公司 | 一种实现redis分布锁高可用的方法及其系统 |
CN114650303A (zh) * | 2022-03-29 | 2022-06-21 | 广东工业大学 | 分布式id生成方法、装置及系统 |
CN116051003A (zh) * | 2023-03-03 | 2023-05-02 | 中国联合网络通信集团有限公司 | 库存处理方法、装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9129276B1 (en) * | 2011-11-02 | 2015-09-08 | Intuit Inc. | Inventory management |
CN107180040A (zh) * | 2016-03-09 | 2017-09-19 | 广州市动景计算机科技有限公司 | 一种业务数据的管理方法及装置 |
CN110839064A (zh) * | 2019-10-24 | 2020-02-25 | 苏宁云计算有限公司 | 一种分布式系统执行脚本的方法及装置 |
CN110933139A (zh) * | 2019-11-05 | 2020-03-27 | 浙江工业大学 | 一种解决Web服务器高并发的系统及方法 |
CN111125180A (zh) * | 2018-10-30 | 2020-05-08 | 千寻位置网络有限公司 | 库存数据的统计方法及装置、服务器及分布式购买系统 |
CN111752957A (zh) * | 2019-03-28 | 2020-10-09 | 苏宁易购集团股份有限公司 | 一种基于缓存化的销售锁定方法及系统 |
CN112102044A (zh) * | 2020-11-10 | 2020-12-18 | 成都四方伟业软件股份有限公司 | 一种消息队列处理高并发秒杀商品的方法、系统及装置 |
-
2020
- 2020-12-28 CN CN202011587255.4A patent/CN112667600A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9129276B1 (en) * | 2011-11-02 | 2015-09-08 | Intuit Inc. | Inventory management |
CN107180040A (zh) * | 2016-03-09 | 2017-09-19 | 广州市动景计算机科技有限公司 | 一种业务数据的管理方法及装置 |
CN111125180A (zh) * | 2018-10-30 | 2020-05-08 | 千寻位置网络有限公司 | 库存数据的统计方法及装置、服务器及分布式购买系统 |
CN111752957A (zh) * | 2019-03-28 | 2020-10-09 | 苏宁易购集团股份有限公司 | 一种基于缓存化的销售锁定方法及系统 |
CN110839064A (zh) * | 2019-10-24 | 2020-02-25 | 苏宁云计算有限公司 | 一种分布式系统执行脚本的方法及装置 |
CN110933139A (zh) * | 2019-11-05 | 2020-03-27 | 浙江工业大学 | 一种解决Web服务器高并发的系统及方法 |
CN112102044A (zh) * | 2020-11-10 | 2020-12-18 | 成都四方伟业软件股份有限公司 | 一种消息队列处理高并发秒杀商品的方法、系统及装置 |
Non-Patent Citations (1)
Title |
---|
LUU_一只程序猿: "redis实现库存扣减操作", 《CSDN博客》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113778697A (zh) * | 2021-09-14 | 2021-12-10 | 福建天晴数码有限公司 | 一种实现redis分布锁高可用的方法及其系统 |
CN114650303A (zh) * | 2022-03-29 | 2022-06-21 | 广东工业大学 | 分布式id生成方法、装置及系统 |
CN116051003A (zh) * | 2023-03-03 | 2023-05-02 | 中国联合网络通信集团有限公司 | 库存处理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112667600A (zh) | 一种redis与MySQL结合的库存解决方法 | |
EP3111325B1 (en) | Automatically retrying transactions with split procedure execution | |
US8977898B1 (en) | Concurrent access to data during replay of a transaction log | |
CN101495976B (zh) | 用于直接更新软件事务存储器的方法和系统 | |
CN110765178B (zh) | 分布式事务的处理方法及装置、计算机可存储介质 | |
CN111241061B (zh) | 状态数据库的写入方法、数据处理装置及存储介质 | |
CN102203779B (zh) | 更新数据的方法和控制装置 | |
Krishnan et al. | {TIPS}: Making volatile index structures persistent with {DRAM-NVMM} tiering | |
CN110716936B (zh) | 一种基于SpringBoot+JPA的数据库乐观锁实现方法及系统 | |
CN111090663A (zh) | 事务并发控制方法、装置、终端设备及介质 | |
CN101350022B (zh) | 基于数据库逻辑锁的变更处理方法 | |
CN109933606B (zh) | 一种数据库修改方法、装置、设备及存储介质 | |
EP3396560B1 (en) | Database operating method and device | |
US9170837B2 (en) | Transaction concurrent execution control system, method and program for carrying out a control of concurrently executing a transaction, including measuring execution time from starting to ending of transaction execution | |
CN108415758B (zh) | 分布式事务协调方法及装置 | |
CN103136215A (zh) | 存储系统的数据读写方法和装置 | |
US20090222494A1 (en) | Optimistic object relocation | |
CN113220490A (zh) | 异步写回持久化内存的事务持久化方法及系统 | |
CN112559496A (zh) | 一种分布式数据库事务原子性实现方法及装置 | |
US7861114B2 (en) | System and method for recovery of memory transactions | |
KR101419428B1 (ko) | 모바일 환경에 구축된 데이터베이스에 대한 트랜잭션 로깅 및 회복 장치 및 그 방법 | |
CN103336682B (zh) | 对先行载入值检查的增强 | |
CN114253988B (zh) | 基于版本的数据更新方法、装置、电子设备及存储介质 | |
CN112685438B (zh) | 数据处理系统、方法、装置及存储介质 | |
CN112286992B (zh) | 一种查询方法、分布式系统、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210416 |
|
RJ01 | Rejection of invention patent application after publication |