转自:https://segmentfault.com/a/1190000039670844,https://bbs.csdn.net/topics/392160228,https://cloud.tencent.com/developer/article/1775715
1.介绍
SETNX key value
- 只在键 key 不存在的情况下, 将键 key 的值设置为 value 。
- 若键 key 已经存在, 则 SETNX 命令不做任何动作。
- SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
例子:
redis> EXISTS job # job 不存在 (integer) 0 redis> SETNX job "programmer" # job 设置成功 (integer) 1 redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败 (integer) 0 redis> GET job # 没有被覆盖 "programmer"
setnx
本身是一个原子操作,可以保证多个线程只有一个能拿到锁,能返回true
,其他的都会返回false
。
简单实现分布式锁的过程:
A\B同时在业务中setnx来申请锁(高并发下重复提交场景),A申请到锁,进行业务操作,或者入库操作,完成操作后释放锁。这时候B会有几种情况:
- B申请锁的时候A还没释放锁,此时B申请失败,业务逻辑处理直接返回失败
- B申请锁时候A已经释放了锁,B获得锁,这时候一般会查询数据库/缓存,根据全局唯一ID索引来确认该操作之前是否做过,做过了直接返回失败,否则将唯一索引入库。再执行业务操作释放锁。
标签:setnx,redis,学习,命令,job,key,SETNX,操作 From: https://www.cnblogs.com/BlueBlueSea/p/16988551.html