当服务运行在多台服务器时,为了避免服务器同时占用一个资源,或者重复处理同一个资源,我们需要通过 分布式锁 解决同一时间占用的问题,保证同一时间只有一台服务器处理某些逻辑.
redis 分布式锁
通过redis...单线程特性,很容易就能实现一个分布式锁方案:
?...解决:
所以,在redis set key value的时候,需要额外设置个过期时间,当进程异常/进程处理超时,redis key过期之后会自动释放锁,避免整个集群无法工作
跨服务删除键:
在加入锁超时逻辑之后...- redis过期自动删除key
- 服务器B 拿到锁,rand一个随机数 randNum,redis set key randNum,将随机数存入key中
- 服务器A处理成功,获取 key的值,... "lua脚本字符串" 1 锁的key 随机数
eval "if redis.call('get',KEYS[1]) == ARGV[1] then return redis.call('del',KEYS