请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问set命令为什么不可以做分布式锁

setnx命令的expire设置过期时间和设置锁不是原子操作,set可以进行原子操作,请问为什么不用set呢?

正在回答 回答被采纳积分+3

1回答

geelylucky 2019-07-17 17:51:36

同学,因为使用set的话,是没法判断当前key是否存在的,setnx的语意就是SET if Not exists,不存在就set,使用set是没法避免这个判断前提的,这样的话,就会存在一个并发问题,导致的问题更多。setnx虽然设置过期时间没发做到原子操作,但是咱们可以把过期时间作为value,这样就可以不需要expire,通过对比value和当前时间就可以判断是否过期。

0 回复 有任何疑惑可以回复我~
  • 老师好
    关于V1版分布式锁的改进,因为官方redis 2.6.12之后,set命令增加支持了 EX PX NX XX参数: SET key value [EX seconds|PX milliseconds] [NX|XX],而这个命令是原子性的,也能通过这个命令 改进的吧
    回复 有任何疑惑可以回复我~ 2019-11-16 13:39:11
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信