directory search
Cluster cluster addslots(集群 槽位) cluster count failure reports(集群计数失败报告) cluster countkeysinslot cluster delslots cluster failover cluster forget cluster getkeysinslot cluster info cluster keyslot(集群键槽) cluster meet cluster nodes(集群节点) cluster replicate(集群复制) cluster reset(集群重置) cluster saveconfig cluster set config epoch cluster setslot cluster slaves cluster slots readonly readwrite Connection auth echo ping quit select swapdb Geo geoadd geodist geohash geopos georadius georadiusbymember Hashes hdel hexists hget hgetall hincrby hincrbyfloat hkeys hlen hmget hmset hscan hset hsetnx hstrlen hvals HyperLogLog pfadd pfcount pfmerge Keys del dump exists expire expireat keys migrate move object persist pexpire pexpireat pttl randomkey rename renamenx restore scan sort touch ttl type unlink wait Lists blpop brpop brpoplpush lindex linsert llen lpop lpush lpushx lrange lrem lset ltrim rpop rpoplpush rpush rpushx Pub/Sub psubscribe publish pubsub punsubscribe subscribe unsubscribe Scripting eval evalsha script debug script exists script flush script kill script load Server bgrewriteaof bgsave client getname client kill client list client pause client reply client setname command command count command getkeys command info config get config resetstat config rewrite config set dbsize debug object debug segfault flushall flushdb info lastsave monitor role save shutdown slaveof slowlog time Sets sadd scard sdiff sdiffstore sinter sinterstore sismember smembers smove spop srandmember srem sscan sunion sunionstore Sorted Sets zadd zcard zcount zincrby zinterstore zlexcount zrange zrangebylex zrangebyscore zrank zrem zremrangebylex zremrangebyrank zremrangebyscore zrevrange zrevrangebylex zrevrangebyscore zrevrank zscan zscore zunionstore Strings append bitcount bitfield bitop bitpos decr decrby get getbit getrange getset incr incrby incrbyfloat mget mset msetnx psetex set setbit setex setnx setrange strlen Transactions discard exec multi unwatch watch
characters

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 正确执行。空回复:如果由于用户指定了NXor 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 0end

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

Previous article: Next article: