redis 锁 问题

2017-12-19 11:35:29 +08:00
 biaoliruyi

SETNX lock.foo <current Unix time + lock timeout + 1> 这一段设置超时时间一直不能理解, 如果我的程序在特殊情况下无法在超时时间内就被其他实例获取到锁了。

4195 次点击
所在节点    Redis
4 条回复
andyzhshg
2017-12-19 11:43:48 +08:00
这么设置不就是为了能在超时的时候让别的实例获取到锁么。。。不想让别的实例获取到就不设超时就好了,代价就是可能会出现死锁。
picone
2017-12-19 12:53:59 +08:00
1.这种锁很依赖时间,有可能是机器间的日期不同步。
2.超时获取锁的时候建议做 double check。
kier
2017-12-19 12:58:58 +08:00
biaoliruyi
2017-12-19 14:21:04 +08:00
value 设置为超时时间来解决死锁我能理解。
举个例子
我有一段业务代码是向 oss 服务上传文件当业务出现峰值时服务器的带宽被消耗完了的时候会出现业务没走完但是锁的时间已经到的情况,这样无法保证业务的原子性了。
@andyzhshg

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/415934

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX