Redis SET命令

设置key以保存字符串型的value。 如果key已经存在,则无论其保存的值的类型为何,它都会被覆盖。

可用版本:从1.0.0开始可用 时间复杂度:O(1)

命令格式

SET key value [EX seconds|PX milliseconds|KEEPTTL] [NX|XX]

参数

Set命令支持以下参数,来改变它的行为:

  • EX seconds -- 设置过期时间,以秒为单位。
  • PX miliseconds -- 设置过期时间,以毫秒为单位。
  • NX -- 只在key不存在的情况下,保存key及对应的value
  • XX -- 只在key存在的情况下,保存key及对应的value
  • KEEPTTL -- 保持key原有的过期时间。

注意:如今,Set命令的参数的功能已经可以代替SETNXSETEXPSETEX,这三个命令可能会在以后的Redis版本中被删除。

返回值

如果命令执行成功返回:OK,如果因为指定了参数NXXX,但条件不符合,SET命令没有执行时,返回 nil

示例

使用SET命令保存值;使用GET命令获取值;设置已在存的键,将会覆盖原来的值;值包含空格时,要用引号引起来。

redis> SET mykey Hello
OK
redis> GET mykey
"Hello"
redis> SET mykey "Hello World"
OK
redis> GET mykey
"Hello World"

使用EX选项设置过期时间,以秒为单位。超过过期时间后值将被丢弃。

redis> SET city BeiJing EX 5
"OK"

...5秒后...

redis> GET city
(nil)

使用PX选项设置过期时间,以毫秒为单位。

redis> SET city BeiJing PX 5000
OK

使用NX选项,确保设置的key不存在时才成功

redis> SET key value1 NX 
OK
redis> SET key value2 NX 
(nil)
redis> GET key
"value1"

使用XX选项,确保设置的key存在时才成功

redis> SET key value1 XX 
(nil)
redis> SET key value1 
OK
redis> SET key value2 XX 
OK
redis> GET key
"value2"

使用KEEPTTL选项,确保设置的key对应的值但不改变原有的过期时间;ttl命令可以查询key的过期时间

redis> SET key value1 EX 100 
OK
redis> SET key value2 KEEPTTL 
OK
redis> ttl key
(integer) 90

变更历史

  • >=2.6.12添加EX, PX, NXXX选项。
  • >= 6.0 添加KEEPTTL选项。

相关命令

  • MSET 一次性保存多个key value

  • SETNX 当key不存在时,与Set命令的效果相同,如果key已存在,不执行任何操作

  • SETEX 保存key及对应的value,并设置过期时间

  • PSETEX 保存key及对应的value,并设置过期时间,以毫秒为单位

  • SETRANGE 修改key对应的值的一部分,从指定的offset开始