关于分布式锁的思考,用redis处理

爱吃大肉包 发布于 2016/06/30 21:52
阅读 485
收藏 0


1,用SETNX 在redis里设置个VALUE


2,若返回1,代表获取锁成功,expire设置VALUE超时2秒(锁超时), 执行处理,完成后,DEL锁释放


3,若返回0, 代表获取锁失败, sleep后,继续SETNX



这样处理有什么问题呢?


附上一篇分析 :http://blog.csdn.net/ugg/article/details/41894947


里面有一句

至于为什么不使用Redis的muti,expire,watch等机制,可以查一参考资料,找下原因。  还真一时没想到

加载中
0
dodomouse
dodomouse
在我公司的一个项目中,我原先也想用redis作为分布式锁的,后来想来想去,采用了zookeeper实现了一个分布式锁
dodomouse
dodomouse
@爱吃大肉包 主要还是跟redis的应用有关,redis在我们项目中也是作为一个数据库存在的,不能过多暴露,不然会存在隐患
爱吃大肉包
爱吃大肉包
为什么呢。 有BUG?~
0
就是个精虫上脑的地方
就是个精虫上脑的地方
zk有现成的分布式锁 还有其他很好的特性玩
0
scylla
scylla
这种创建与删除会有潜在的读写冲突。使用INCR/DECR自增加锁,redis保证这两个命令是原子操作,自减释放锁,返回结果为1的时候加锁成功,返回结果大于1时加锁失败,再自减释放。
爱吃大肉包
爱吃大肉包
说白了就是根据SETNX的成功与否判断是否获取到了锁
爱吃大肉包
爱吃大肉包
SETNX 是原子性操作吧
返回顶部
顶部