面试问Redis锁,我脸都绿了......
来自:掘金(作者:Vt 编辑:陶家龙) 原文链接: https://juejin.im/post/5e61a454e51d4526f071e1df 谈起 Redis 锁,下面三个,算是出现最多的高频词汇: Setnx RedLock Redisson Setnx 目前通常所说的 Setnx 命令,并非单指 Redis 的 setnx key value 这条命令。 一般代指 Redis 中对 Set 命令加上 NX 参数进行使用,Set 这个命令,目前已经支持这么多参数可选: SET key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL] 当然了,就不在文章中默写 API 了,基础参数还有不清晰的,可以蹦到官网。 上图是笔者画的 Setnx 大致原理,主要依托了它的 Key 不存在才能 Set 成功的特性,进程 A 拿到锁,在没有删除锁的 Key 时,进程 B 自然获取锁就失败了。 那么为什么要使用 PX 30000 去设置一个超时时间? 是怕进程 A 不讲道理啊,锁没等释放呢,万一崩了,直接原地把锁带走了,导致系统中谁也拿不到锁。 就算这样,还是不能保证万无一失。 如果进程 A 又不讲道理,操作锁内资源超过笔者设置的超时时间,那么就会导致其他进程拿到锁,等进程 A 回来了,回手就是把其他进程的锁删了,如图: 还是刚才那张图