上一篇>中使用了基于CAS和幂等思想,
使用当前值和期望值比较以及版本号变更比较来完成并发场景下
控制库存不被少扣或者扣减成负值,
此篇幅使用另外一个思路解决并发修改库存的问题,...lua脚本的运行环境,默认用
eval命令执行;我之所以用到redis执行lua脚本来
批量执行redis指令操作,最大原因是lua脚本被redis
执行的时候,能够
保证原子特性(也就是中途不会存在类似java...在多线程场景下,让各个服务
去检查和修改缓存中
的库存量,如果redis中修改成功,
再把数据变更落地,把库存扣减持久化到数据库层;
根据上述redis和lua特性,
每次请求调用过来扣减库存,
都是去使用...redis执行lua脚本去做原子操作检查和
修改缓存中的库存;具体看代码分析....(ARGV[2]) then"); //c=-1表示扣减失败 lua.append("\nc = -1"); lua.append("\nelse"); //库存足额情况下,把库存扣减 lua.append