为了账号安全,请及时绑定邮箱和手机立即绑定

关于redis实现分布式锁的问题?

关于redis实现分布式锁的问题?

斯蒂芬大帝 2018-07-04 14:06:12
redis使用setnx命令创建锁,失效时间我设置多长时间为好?如何设置的失效时间太短,方法没等执行完,锁就自动释放了,那么就会产生并发问题。如果设置的时间太长,其他获取锁的线程就可能要平白的多等一段时间。在只考虑单机redis的情况下,如何处理这个问题?
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

可以预估一下你的业务请求时长,通常都在50-100ms之间,你的失效时间可以设置到100ms,如果更高你可以设置到1s,在redis防重的下一步就是数据库防重,数据库防重一定是要做的,所以就算redis锁失效,数据库肯定能防住。

查看完整回答
反对 回复 2018-07-20
?
慕神8447489

TA贡献1780条经验 获得超1个赞

不知道我现在救火还来不来得及。

不要使用 setnx 来创建一个可过期的锁,请使用 set key value nx ex time (SET 文档地址)来创建。这样能确保 setnx 和 expire 结合为一个原子操作。

如果先 setnx 再 expire,这个操作不是原子的,可能引发新的问题。比如 setnx 之后程序异常崩溃了,导致该 key 永不过期,从而引起其他请求锁的线程一直阻塞。

希望现在救火还来得及。


查看完整回答
反对 回复 2018-07-20
  • 2 回答
  • 1 关注
  • 1794 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信