上一篇库存方案一>>中使用了基于CAS和幂等思想,
使用当前值和期望值比较以及版本号变更比较来完成并发场景下
控制库存不被少扣或者扣减成负值,
此篇幅使用另外一个思路解决并发修改库存的问题,...利用redis单线程阻塞操作特性,以及redis执行lua脚本原子性,
来完成控制并发场景下库存扣减问题;首先简单
介绍一下此方案用到的一些redis和lua的特性:
1.redis阻塞操作
鉴于redis...在多线程场景下,让各个服务
去检查和修改缓存中
的库存量,如果redis中修改成功,
再把数据变更落地,把库存扣减持久化到数据库层;
根据上述redis和lua特性,
每次请求调用过来扣减库存,
都是去使用...redis执行lua脚本去做原子操作检查和
修改缓存中的库存;具体看代码分析....(ARGV[2]) then"); //c=-1表示扣减失败 lua.append("\nc = -1"); lua.append("\nelse"); //库存足额情况下,把库存扣减 lua.append