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

来源:14-3 分布式锁双重防死锁演进

offeroffer

2019-07-17

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

写回答

1回答

geelylucky

2019-07-17

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

0
1
慕尼黑7546459
老师好 关于V1版分布式锁的改进,因为官方redis 2.6.12之后,set命令增加支持了 EX PX NX XX参数: SET key value [EX seconds|PX milliseconds] [NX|XX],而这个命令是原子性的,也能通过这个命令 改进的吧
2019-11-16
共1条回复

Java企业级电商项目架构 Tomcat集群与Redis分布式

Tomcat集群+Redis分布式+代码重构+源码原理解析

2685 学习 · 947 问题

查看课程