Redis SET 命令手册

Redis SET命令用于设置键值对,支持多种选项如设置过期时间、条件性设置等。从Redis 1.0.0开始,SET可以替代多个单独命令,如SETNX,SETEX等。此命令具有时间复杂度O(1),允许设置过期时间,有条件地设置值,并可获取旧值。解锁资源时推荐使用不可猜测的随机字符串和脚本以增强安全性。
摘要由CSDN通过智能技术生成

从Redis 1.0.0 起可用
时间复杂度:O(1)

设置 key 以保存字符串 value。如果 key 已经保存了一个 value,则无论其类型如何,都会覆盖该值。成功的 SET 操作将丢弃与该键任何以前的时间关联的内容。

命令格式:SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]

1. 可选项

SET命令支持一组可选项来修改它的行为:

  • EX seconds:设置指定的过期时间,单位为秒;
  • PX milliseconds:设置指定的过期时间,单位为毫秒;
  • EXAT timestamp-seconds:设置key过期的指定Unix时间(以秒为单位);
  • PXAT timestamp-milliseconds:设置key过期的指定Unix时间(以毫秒为单位);
  • NX:只有当key不存在时才设置它;
  • XX:只有当key存在时才设置它;
  • KEEPTTL:保存与key建立连接的时间;
  • GET:返回存储在value上的旧值,或当value不存在时返回 nil 。

注意:由于SET命令选项可以替代SETNX, SETEX, PSETEX, GETSET,因此在Redis的未来版本中,这些命令可能会被弃用并最终被删除。

2. 返回值

简单字符串应答:如果SET被正确执行,则OK。批量字符串应答:当设置GET选项时,旧值存储在键上,或当键不存在时为nil。Null应答:如果用户指定了NX或XX选项但条件不满足而没有执行SET操作,或者用户指定了GET选项但之前没有键值,则返回Null Bulk reply。

3. 历史变化

  • >=2.6.12:添加可选项 EX, PX和 XX;
  • >=6.0:添加可选项 KEEPTTL;
  • >=6.2:添加可选项 GET, EXAT和PXAT选项。

4. 案例

>set mykey "hello"
OK
> get mykey
"hello"
> set anotherkey "will expire in a minute" ex 60
OK

5. 模式

注意:为了支持Redlock算法,不建议使用下面的模式,它的实现稍微复杂一点,但是提供了更好的保证,并且容错能力强。

命令 SET resource-name anystring NX EX max-lock-time 是用Redis实现锁定系统的一种简单方法。

如果上面的命令返回OK(或重试一段时间后,如果命令返回Nil)客户端可以获得锁,并使用DEL就可以删除锁。

锁定将在到达过期时间后自动释放。

修改解锁模式可以使这个系统更健壮,如下所示::

  • 与其设置固定的字符串,不如设置一个不可猜测的大型随机字符串,称为token;
  • 发送一个只在值匹配时移除键的脚本,而不是使用DEL释放锁。

这避免了客户端在过期时间后试图释放锁,删除另一个客户端在之后创建的key。

解锁脚本的示例如下:

if redis.call("get",KEYS[1]) == ARGV[1]
then
    return redis.call("del",KEYS[1])
else
    return 0
end

该脚本应该调用EVAL ...script... 1 resource-name token-value

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值