当服务运行在多台服务器时,为了避免服务器同时占用一个资源,或者重复处理同一个资源,我们需要通过 分布式锁 解决同一时间占用的问题,保证同一时间只有一台服务器处理某些逻辑.
redis 分布式锁
通过redis...单线程特性,很容易就能实现一个分布式锁方案:
?...解决:
所以,在redis set key value的时候,需要额外设置个过期时间,当进程异常/进程处理超时,redis key过期之后会自动释放锁,避免整个集群无法工作
跨服务删除键:
在加入锁超时逻辑之后...,如果等于/不等于则删除" 这个逻辑时,由于redis的命令是单一命令问题
不能直接通过 get key,再判断del key实现,需要使用redis的eval lua脚本,进行实现:
if redis.call...[1]) else return 0 end" 1 pay-center-lock-key 90754863
redis set 命令的NX,PX
在新版本中,可以直接通过redis set 实现:"如果不存在