当服务运行在多台服务器时,为了避免服务器同时占用一个资源,或者重复处理同一个资源,我们需要通过 分布式锁 解决同一时间占用的问题,保证同一时间只有一台服务器处理某些逻辑.
redis 分布式锁
通过redis...单线程特性,很容易就能实现一个分布式锁方案:
?...randNum,则删除
redis 原子性问题
在上面的 "先获取key的值,如果等于/不等于则删除" 这个逻辑时,由于redis的命令是单一命令问题
不能直接通过 get key,再判断del key实现...,需要使用redis的eval lua脚本,进行实现:
if redis.call('get',KEYS[1]) == ARGV[1] then
return redis.call('del',...KEYS[1]) else return 0 end" 1 pay-center-lock-key 90754863
redis set 命令的NX,PX
在新版本中,可以直接通过redis set 实现