【Redis】解决分布式锁——死锁问题(SETNX 、EXPIRE 、EX、NX、PX )
文章目录1. Redis分布式锁实现原理2. 针对该问题,redis 在2.6.12版本过后增加新的解决方案1. Redis分布式锁实现原理SETNX key value //如果key不存在,则创建并赋值,成功加入缓存并且返回1;如果已存在,则返回0。EXPIRE key seconds //设置key的生存时间,当key过期(生存时间为0),会自动删除存在风险:SETNX和EXPIRE 为两个
·
1. Redis分布式锁实现原理
SETNX key value //如果key不存在,则创建并赋值,成功加入缓存并且返回1;如果已存在,则返回0。
EXPIRE key seconds //设置key的生存时间,当key过期(生存时间为0),会自动删除
存在风险:SETNX和EXPIRE 为两个指令,如果设置了SETNX后程序崩溃,EXPIRE未成功执行则会出现资源锁死的情况。
2. 针对该问题,redis 在2.6.12版本过后增加新的解决方案
set key value [expiration EX seconds|PX milliseconds] [NX|XX]
- EX seconds:将键的过期时间设置为 seconds
秒
。
SET key value EX seconds 等同于 SETEX key seconds value - PX millisecounds:将键的过期时间设置为 milliseconds
毫秒
。
SET key value PX milliseconds 等同于 PSETEX key milliseconds value - NX:只在键不存在的时候,才对键进行设置操作。
SET key value NX 等同于 SETNX key value - XX:只在键已经存在的时候,才对键进行设置操作
例如,使用分布式锁,key不存在的时候才进行设置选用NX,过期时间设置为10s,将SETNX和EXPIRE合二为一:
SET product:10001 true ex 10 nx
SET操作成功后,返回的是OK,失败返回NIL
更多推荐
已为社区贡献35条内容
所有评论(0)