SET

SET key value [EX seconds] [PX milliseconds] [NX|XX]
可用版本: >= 1.0.0
时间复杂度: O(1)

将字符串值​​value​​​关联到 ​​key​​ 。

如果​​key​​已经持有其他值, SET会覆盖掉旧值。当SET命令对一个带有生存时间(TTL)的键进行设置之后, 该键原有的 TTL 将被清除。这些在演示中会进行说明。

可选参数

从​​Redis 2.6.12​​版本开始, SET命令的行为可以通过一系列参数来修改:

  • ​EX seconds​​​ : 将键的过期时间设置为 ​​seconds​​ 秒。
  • ​PX milliseconds​​​ : 将键的过期时间设置为 ​​milliseconds​​ 毫秒。
  • ​NX​​​ : 只在键不存在时, 才对键进行设置操作。 执行 ​​SET key value NX​​​ 的效果等同于执行 ​​SETNX key value​​ 。
  • ​XX​​ : 只在键已经存在时, 才对键进行设置操作。

演示

对不存在的键进行设置:

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_时间复杂度


返回​​OK​​。对存在的键进行设置:

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_redis_02


如果​​key​​​已经持有其他值, SET会覆盖掉旧值。​​EX​​选项:

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_redis_03


​PX​​选项:

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_redis_04


​NX​​选项:

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_时间复杂度_05


只在键不存在时, 才对键进行设置操作(返回​​OK​​​),否则返回​​(nil)​​。

​XX​​选项:

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_字符串_06


只在键已经存在时, 才对键进行设置操作(返回​​OK​​​),否则返回​​(nil)​​。并且当SET命令对一个带有生存时间(TTL)的键进行设置之后, 该键原有的 TTL 将被清除。

TTL命令:当​​key​​​不存在时,返回 ​​-2​​​ 。 当 ​​key​​​ 存在但没有设置生存时间时,返回 ​​-1​​​ 。 否则,以秒为单位,返回 ​​key​​ 的剩余生存时间。

注意:在 ​​Redis2.8​​​以前,当 ​​key​​​ 不存在,或者 ​​key​​​ 没有设置生存时间时,命令都返回 ​​-1​​ 。

SETNX

SETNX key value
可用版本: >= 1.0.0
时间复杂度: O(1)

只在键 ​​key​​​ 不存在的情况下, 将键 ​​key​​​ 的值设置为 ​​value​​​ 。
若键 ​​​key​​ 已经存在, 则SETNX命令不做任何动作。

返回值

命令在设置成功时返回 ​​1​​​ , 设置失败时返回 ​​0​​ 。

演示

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_时间复杂度_07

SETEX

SETEX key seconds value
可用版本: >= 2.0.0
时间复杂度: O(1)

将键 ​​key​​​ 的值设置为 ​​value​​​ , 并将键 ​​key​​​ 的生存时间设置为 ​​seconds​​ 秒钟。

如果键 ​​key​​ 已经存在, 那么SETEX 命令将覆盖已有的值。

SETEX 是一个原子(​​atomic​​)操作, 它可以在同一时间内完成设置值和设置生存时间这两个操作。

演示

如果键 ​​key​​ 已经存在, 那么SETEX 命令将覆盖已有的值。

如果之前没有设置生存时间:

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_字符串_08


如果之前有设置生存时间:

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_redis_09


当键 ​​key​​ 不存在的情况下:

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_字符串_10

PSETEX

PSETEX key milliseconds value
可用版本: >= 2.6.0
时间复杂度: O(1)

这个命令和SETEX命令相似, 但它以毫秒为单位设置​​key​​的生存时间, 而不是像SETEX命令那样以秒为单位进行设置。

演示

和SETEX命令相似。

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_时间设置_11

GET

GET key
可用版本: >= 1.0.0
时间复杂度: O(1)

返回与键 ​​key​​ 相关联的字符串值。

演示

当键 ​​key​​​ 不存在时, 返回特殊值​​(nil)​​​ ; 否则, 返回键 ​​key​​ 的值。

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_时间设置_12


如果键 ​​key​​ 的值并非字符串类型, 那么返回一个错误, 因为GET命令只能用于字符串值。

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_时间复杂度_13

GETSET

GETSET key value
可用版本: >= 1.0.0
时间复杂度: O(1)

将键 ​​key​​​ 的值设为 ​​value​​​ , 并返回键 ​​key​​ 在被设置之前的旧值。

演示

返回给定键 ​​key​​ 的旧值。

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_时间设置_14


如果键 ​​key​​​ 没有旧值, 那么命令返回 ​​(nil)​​ 。

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_时间设置_15


和GET命令一样,当键 ​​key​​ 存在但不是字符串类型时,GETSET命令会返回一个错误。

Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍_时间复杂度_16


Redis中字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令就介绍到这里。

写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!