Redis分布式锁 是怎么回事?【最新详细解答】

今天爱分享给大家带来Redis分布式锁 是怎么回事?【最新详细解答】,希望能够帮助到大家。

先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。

但是在setnx之后执行expire之前进程意外crash或者要重启维护了,会造成锁永远得不到释放了。

原因:

Redis的setnx命令是当key不存在时设置key,但setnx不能同时完成expire设置失效时长,不能保证setnx和expire的原子性。

解决办法:

使用set命令完成setnx和expire的操作,保证操作是原子性的
从 Redis 2.6.12 版本开始,set指令有非常复杂的参数,可以同时把setnx和expire合成一条指令来用

set key value [EX seconds] [PX milliseconds] [NX|XX]
EX seconds:设置失效时长,单位秒
PX milliseconds:设置失效时长,单位毫秒
NX:key不存在时设置value,成功返回OK,失败返回(nil)
XX:key存在时设置value,成功返回OK,失败返回(nil)

人已赞赏
数据库

redis应用场景有哪些?【最新最详细】

2020-11-5 14:06:59

数据库

假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?【解决办法】

2020-11-5 14:12:34

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
'); })();