注意:脚本不支持事务
在做商品库存扣除时,如果库存大于扣除的数量,则扣除。在并发情况下会出现,多次扣除的情况,可以使用lua脚本来操作。
lua脚本:
local count = redis.call('get',KEYS[1])
if count >= ARGV[1] then
redis.call('DECRBY',KEYS[1],ARGV[1]);
return 1;
end
return 0
代码调用
DefaultRedisScript script =new DefaultRedisScript();
script.setResultType(Long.class);
script.setScriptSource(new ResourceScriptSource(new
ClassPathResource("t.lua")));
List keys =new ArrayList<>();
//商品Id
keys.add("productId1");
//扣除数量
int delCount=2;
redisTemplate.execute(script, keys,delCount);
后面会更新脚本细节
网友评论