redis使用setnx命令创建锁,失效时间我设置多长时间为好?如何设置的失效时间太短,方法没等执行完,锁就自动释放了,那么就会产生并发问题。如果设置的时间太长,其他获取锁的线程就可能要平白的多等一段时间。在只考虑单机redis的情况下,如何处理这个问题?
2 回答
LEATH
TA贡献1936条经验 获得超6个赞
可以预估一下你的业务请求时长,通常都在50-100ms之间,你的失效时间可以设置到100ms,如果更高你可以设置到1s,在redis防重的下一步就是数据库防重,数据库防重一定是要做的,所以就算redis锁失效,数据库肯定能防住。
慕神8447489
TA贡献1780条经验 获得超1个赞
不知道我现在救火还来不来得及。
不要使用 setnx 来创建一个可过期的锁,请使用 set key value nx ex time (SET 文档地址)来创建。这样能确保 setnx 和 expire 结合为一个原子操作。
如果先 setnx 再 expire,这个操作不是原子的,可能引发新的问题。比如 setnx 之后程序异常崩溃了,导致该 key 永不过期,从而引起其他请求锁的线程一直阻塞。
希望现在救火还来得及。
添加回答
举报
0/150
提交
取消