Redis参考手册
字符串 | Strings
set
SET key value [EX seconds] [PX milliseconds] [NX|XX]
自1.0.0起可用。
时间复杂度: O(1)
设置key
为保存字符串value
。如果key
已经保存了一个值,则不管其类型如何,都会被覆盖。在 SET 操作成功之后,任何以前与密钥关联的生存时间都将被丢弃。
选项
从 Redis 开始2.6.12 SET 支持一组修改其行为的选项:
-
EX
秒 - 设置指定的到期时间,以秒为单位。
-
PX
毫秒 - 设置指定的到期时间,以毫秒为单位。
-
NX
- 只有在密钥不存在的情况下才能设置密钥。
-
XX
- 只有在钥匙已经存在的情况下才能设置。
注意:由于 SET 命令选项可以替代 SETNX,SETEX,PSETEX,因此在未来的 Redis 版本中,这三个命令可能会被弃用并最终被删除。
返回值
简单字符串回复:OK
如果 SET 正确执行。空回复:如果由于用户指定了NX
or XX
选项但未满足条件而未执行 SET 操作,则返回 Null Bulk Reply 。
例子
redis> SET mykey "Hello" "OK"
redis> GET mykey "Hello"
模式
注意:以下模式不推荐使用Redlock算法,该算法实现起来稍微复杂一些,但提供了更好的保证并具有容错性。
该命令SET resource-name anystring NX EX max-lock-time
是使用Redis实现锁定系统的简单方法。
如果上述命令返回OK
(或者如果命令返回 Nil 后一段时间后重试),则客户端可以获取锁,并使用 DEL 删除锁。
锁定将在到期时间后自动释放。
可以使这个系统更健壮地修改解锁模式,如下所示:
- 设置一个不可猜测的大型随机字符串(称为标记),而不是设置固定字符串。
- 不要使用 DEL 来释放锁定,而是发送一个只在值匹配时才删除密钥的脚本。
这样可以避免客户端在过期时间后尝试释放锁,从而删除由稍后获取锁的另一个客户端创建的密钥。
解锁脚本的一个示例与以下内容类似:
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
字符串 | Strings相关
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 它通常被称为数据结构服务器,因为值( value )可以是 字符串( String ), 哈希(Map),列表(list),集合( sets ) 和 有序集合( sorted sets )等类型。
主页 | https://redis.io/ |
源码 | https://github.com/antirez/redis |
发布版本 | 4.0.2 |