关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

数据库语句实现提交订单减库存量

发布时间:2020-03-10 00:00:00

1. 减库存量

一般提交订单减库存量的步骤大约是那样的:

1、查寻货品库存量。这儿立即查的Redis中的库存量。

2、Redis中的库存量减1。这儿采用的Redis指令是:incrby -1

3、扣除数据库查询中的库存量。这儿用数据库查询乐观锁,无需附加上锁

4、异步刷新Redis中的库存量

5、定时执行扫描仪请求超时未付款的买卖,库存量加回去

总结一下这一步骤就是说:先减redis库存量,再减数据库查询库存量,最终更新redis库存量

采用的Redis指令将会:DECR key  或是  INCRBY key -1

更新数据库的SQL将会是那样的:

update 货品库存表 set 库存量 = 库存量 - 1 where 货品ID = xxx and 库存量 > 0;

或是

update 货品库存表 set 库存量 = 库存量 - 1 where 货品ID = xxx and version = xxx;

用乐观锁是一种较为好的方法,并且一遍ID字段名常有数据库索引,能够 灵活运用MySQL行级锁

这类方法还有一个较为恰当的地区是,运用redis的单线程来实际操作库存量,并且也是分子指令,能够 防止高并发难题

另外,先减redis库存量后能够 避免事后因库存量不够而导致提交订单不成功

最终,数据库查询升级完之后,再根据MQ异步刷新缓存文件,能够 促使redis中的库存量偏差不容易很大

交易软件会定时执行扫描仪请求超时未付款的订单信息,随后用MQ多线程通告订单信息和货品管理中心,将订单信息关掉,库存量再放回来

2. 上锁

上锁(例如:根据Redis的分布式锁)

MQ能够 把并行处理转为串行,可是并不可以非常好的处理高并发浏览的难题,全靠锁

上锁会危害特性,可是危害并不大。假定人们用Redisson分布式锁,实际操作redis只必须几ms,因而小事儿耗损并不是哪些问题。全是那么去玩的,不上锁还能该怎么办呢。

3. 运行内存缓存文件

在cms后台管理系统改动数据信息后,同歩或异步刷新redis缓存文件,另外运用zookeeper更新运行内存缓存文件,那样就能够 无需直到必须用的情况下再从redis中同歩。

一定要防止redis大key,最普遍的就是说hash key,设定的情况下不留意,一不小心里边就几百个field了,这对查寻十分不好,能够 取模开展分块。

一定要防止HGETALL指令,运用Pinpoint能够 协助人们剖析每一恳求在每一实际操作所耗费的情况下,进而有利于人们提升

数据备份转移用Canal

 

https://redis.io/commands/incr 

 


/template/Home/Zkeys/PC/Static