Redis分布式锁 setnx命令如何设置key的失效时间

Redis的setnx命令:官方解释如下

Available since 1.0.0.

Time complexity: O(1)

Set key to hold string value if key does not exist. In that case, it is equal to SET. When key already holds a value, no operation is performed. SETNX is short for "SET if Not eXists".

大致意思:将key设置值为value,如果key不存在,这种情况下等同SET命令。 当key存在时,什么也不做。SETNX是”SET if Not eXists”的简写。

Redissetnx命令,不能同时完成expire设置失效时长,不能保证setnxexpire的原子性。

如果在setnx之后执行expire  之前进程意外crash或者要重启维护,岂不是歇菜了

但是我们可以使用set命令完成setnxexpire的操作,并且这种操作是原子操作。
下面是set命令的可选项:

set key value [EX seconds] [PX milliseconds] [NX|XX]
EX seconds:设置失效时长,单位秒
PX milliseconds:设置失效时长,单位毫秒
NX:key不存在时设置value,成功返回OK,失败返回(nil)
XX:key存在时设置value,成功返回OK,失败返回(nil)

案例:设置name=liuxinglin,失效时长100s,不存在时设置
1.1.1.1:6379> set name liuxinglin ex 100 nx
OK
1.1.1.1:6379> get name
"liuxinglin"
1.1.1.1:6379> ttl name
(integer) 94

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Redis分布式锁是一种基于Redis实现的分布式锁技术。它的实现原理是利用Redis的单线程特性,通过SETNXSET if Not eXists)指令实现锁的互斥性和EXPIRE指令设置锁的过期时间实现锁的自动释放。 以下是Redis分布式锁的详细实现步骤: 1. 客户端A请求获取锁,向Redis中写入一个key,如果写入成功则视为获取锁成功,否则视为获取锁失败。 2. 如果获取锁成功,客户端A需要在一定时间内完成业务操作并释放锁,否则其他客户端无法获取锁。 3. 客户端B请求获取锁,向Redis中写入同样的key,如果写入成功则视为获取锁成功,否则视为获取锁失败。 4. 如果客户端A在规定时间内未能完成业务操作并释放锁,则Redis中的锁会过期自动释放,其他客户端可以获取锁。 5. 如果客户端B获取锁成功,则客户端A的锁失效,客户端A需要重新获取锁。 需要注意的是,Redis分布式锁的实现需要考虑以下问题: 1. 锁的持续时间不能太长,否则会导致其他客户端长时间等待。 2. 锁的持续时间不能太短,否则会导致客户端A在规定时间内未能完成业务操作并释放锁,锁被自动释放的同时,其他客户端也可以获取锁,导致锁的互斥性失效。 3. 锁的keyRedis中需要具有唯一性,否则可能会导致不同的业务操作获取到同一个锁,导致数据错乱。 4. Redis分布式锁的实现需要考虑高并发的情况,需要使用分布式锁框架来确保锁的可靠性和稳定性。 总之,Redis分布式锁是一种轻量级的分布式锁技术,具有简单、高效、可靠的特点,在实际应用中得到广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值