猿问

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

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

斯蒂芬大帝
浏览 1866回答 2
2回答

LEATH

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

慕神8447489

不知道我现在救火还来不来得及。不要使用 setnx 来创建一个可过期的锁,请使用 set key value nx ex time (SET 文档地址)来创建。这样能确保 setnx 和 expire 结合为一个原子操作。如果先 setnx 再 expire,这个操作不是原子的,可能引发新的问题。比如 setnx 之后程序异常崩溃了,导致该 key 永不过期,从而引起其他请求锁的线程一直阻塞。希望现在救火还来得及。
随时随地看视频慕课网APP
我要回答