0
点赞
收藏
分享

微信扫一扫

超详细Redis之Key操作API,什么?看不懂!你来锤我

爱上流星雨 2022-03-12 阅读 59




  • j3_liuliang
  • Redis常用API即应用场景开始系列(key),如果觉得有用可以关注博主,不定时更新哦!


​相关文章导航​


  1. ​​超详细Redis之Key操作API,什么?看不懂!你来锤我​​
  2. ​​Redis之String超详细API使用及应用场景介绍​​
  3. ​​SCAN及相关SSCAN,HSCAN和ZSCAN命令解析​​
  4. ​​什么?Redis的List类型不会用,看我这个超详细API使用及应用场景​​
  5. ​​Redis之Hash超详细API使用及应用场景介绍,不看亏了!​​
  6. ​​Redis之Set集合数据类型API使用及图文并茂应用场景,不看血亏!​​
  7. ​​Redis之Sorted Set数据类型API及应用场景解析​​

一、键(key)

1.1 TYPE(type)


Redis Type 命令用于返回 key 所储存的值的类型。


​语法​​:

127.0.0.1:6379> TYPE KEY_NAME

​可用版本​​: >= 1.0.0

​返回值​

返回 key 的数据类型,数据类型有:


  • none (key不存在)
  • string (字符串)
  • list (列表)
  • set (集合)
  • zset (有序集)
  • hash (哈希表)

案例:

127.0.0.1:6379> set stringkey stringvalue   #设置String类型
OK
127.0.0.1:6379> type stringkey #返回String
string
127.0.0.1:6379> lpush listkey list01 list02 #设置list类型
(integer) 2
127.0.0.1:6379> type listkey #返回list
list
127.0.0.1:6379> sadd setkey setvalue #设置set类型
(integer) 1
127.0.0.1:6379> type setkey #返回set
set
127.0.0.1:6379> zadd zsetkey 1 "liuliang" #设置zset类型
(integer) 1
127.0.0.1:6379> type zsetkey #返回zset
zset
127.0.0.1:6379> hset hashkey name liuliang #设置hash类型
(integer) 1
127.0.0.1:6379> type hashkey #返回hash
hash

1.2 PEXPIREAT(pexpireat)


Redis PEXPIREAT 命令用于设置 key 的过期时间,​​亿毫秒记​​。key 过期后将不再可用。


​语法​

127.0.0.1:6379> PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP

​可以版本:​​>= 1.0.0

​返回值:​​设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。

​案例​

127.0.0.1:6379> set k3 v3           #创建key 并赋值
OK
127.0.0.1:6379> pexpireat k3 5000000000000 #设置过期时间,大于等于这个输才行1000000000000
(integer) 1
127.0.0.1:6379> ttl k3 #查看剩余过期时间
(integer) 3398395525 #单位秒
127.0.0.1:6379> ttl k3
(integer) 3398395522
127.0.0.1:6379>

1.3 RENAME(rename)


Redis RENAME命令用于修改 key 的名称 。


​语法​

127.0.0.1:6379> RENAME OLD_KEY_NAME NEW_KEY_NAME

​可以版本:​​>= 1.0.0

​返回值:​

改名成功时提示 OK ,失败时候返回一个错误。

当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令 将覆盖旧值。

​案例​

###################   第一种情况:重命名的新key不存在   ###################

127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> rename j3-liuliang liuliang #重命名key,新key不存在
OK
127.0.0.1:6379> exists j3-liuliang #exists判断key是否存在,0不存在,1存在
(integer) 0
127.0.0.1:6379> exists liuliang
(integer) 1

################### 第二种情况:重命名的新key存在 ###################

127.0.0.1:6379> set xiaozhang 28 #设置key并赋值
OK
127.0.0.1:6379> rename liuliang xiaozhang #重命名key(liuliang),新key(xiaozhang)存在
OK #重命名成功
127.0.0.1:6379> exists liuliang #查看key是否存在
(integer) 0
127.0.0.1:6379> exists xiaozhang
(integer) 1
127.0.0.1:6379> get xiaozhang #可以发现,如果重命名的key存在,则会覆盖新key的值
"18"

1.4 PERSIST (persist)


Redis PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。


​语法​

127.0.0.1:6379> PERSIST KEY_NAME

​可以版本:​​>= 2.2.0

​返回值:​​当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0 。

​案例​

127.0.0.1:6379> set j3-liuliang 18      #设置key并赋值
OK
127.0.0.1:6379> expire j3-liuliang 100 #设置过期时间
(integer) 1
127.0.0.1:6379> ttl j3-liuliang #查看剩余过期时间
(integer) 98
127.0.0.1:6379> persist j3-liuliang #移除key的过期时间
(integer) 1
127.0.0.1:6379> ttl j3-liuliang #查看key状态,-1永久有效
(integer) -1

1.5 MOVE(move)


Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。


​语法​

127.0.0.1:6379> MOVE KEY_NAME DESTINATION_DATABASE

​可以版本:​​>= 1.0.0

​返回值:​​移动成功返回 1 ,失败则返回 0 。

​案例​

###################   第一种情况:key存在于当前数据库中(移动成功,当前库不存在key目标库存在key)   ###################
127.0.0.1:6379> select 0 #切换数据库,默认就是 0 号数据库
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并复制
OK
127.0.0.1:6379> move j3-liuliang 1 #移动key到 1 号数据库
(integer) 1
127.0.0.1:6379> exists j3-liuliang #查看当前数据库是否存在key
(integer) 0
127.0.0.1:6379> select 1 #切换数据库
OK
127.0.0.1:6379[1]> exists j3-liuliang #查看当前数据库是否存在key
(integer) 1
127.0.0.1:6379[1]>

################### 第二种情况:key不存在于当前数据库中(移动失败,因为key根本不存在) #################
127.0.0.1:6379> flushall #清空所有数据库数据 0-15
OK
127.0.0.1:6379> exists j3-liuliang #查看当前数据库是否存在key
(integer) 0
127.0.0.1:6379> move j3-liuliang 1 #将一个不存在的key移动到 1 号数据库
(integer) 0 #返回 0 说明已经失败了
127.0.0.1:6379> select 1 #切换数据库
OK
127.0.0.1:6379[1]> exists j3-liuliang #查看当前数据库是否存在key
(integer) 0 #显然不存在
127.0.0.1:6379[1]>

################### 第三种情况:当源数据库和目标数据库有相同的 key 时(结论移动失败,不做任何变化) ####
127.0.0.1:6379[1]> flushall #清空所有数据库数据 0-15
OK
127.0.0.1:6379[1]> set j3-liuliang 28 #在当前数据库设置一个key
OK
127.0.0.1:6379[1]> select 0 #切换数据库
OK
127.0.0.1:6379> set j3-liuliang 18 #设置和上一个数据库中相同的一个key,值不要一样,便于区分
OK
127.0.0.1:6379> move j3-liuliang 1 #将当前数据库中key移动到上一个数据库中
(integer) 0 #发现,移动失败,说明,当两个数据库中有相同的key时,会移动失败
127.0.0.1:6379> get j3-liuliang #获取当前数据库中key,发现没有变化
"18"
127.0.0.1:6379> select 1 #切换数据库
OK
127.0.0.1:6379[1]> get j3-liuliang #发现也没有变化
"28"
127.0.0.1:6379[1]>

1.6 RANDOMKEY(randomkey)


Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。


​语法​

127.0.0.1:6379> RANDOMKEY

​可以版本:​​>= 1.0.0

​返回值:​​当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil 。

​案例​

127.0.0.1:6379> flushall                #清空所有数据库数据
OK
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 #一次设置多个key value
OK
127.0.0.1:6379> keys * #查看数据库说有key
1) "k4"
2) "k5"
3) "k1"
4) "k2"
5) "k3"
127.0.0.1:6379> randomkey #随机输出一个key
"k4"
127.0.0.1:6379> randomkey
"k4"
127.0.0.1:6379> randomkey
"k4"
127.0.0.1:6379> randomkey
"k1"
127.0.0.1:6379> flushall #情况所有数据库数据
OK
127.0.0.1:6379> randomkey #发现输出为 nil
(nil)
127.0.0.1:6379>

1.7 DUMP(dump)


Redis DUMP 命令用于序列化给定 key ,并返回被序列化的值。


​语法​

127.0.0.1:6379> DUMP KEY_NAME

​可以版本:​​>= 2.6.0

​返回值:​​如果 key 不存在,那么返回 nil 。 否则,返回序列化之后的值。

​案例​

127.0.0.1:6379> flushall          #清空所有数据库
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> dump j3-liuliang #将给定的key序列化
"\x00\xc0\x12\t\x00\x9d+/\x83A\xa7'\x9a" #key序列后的值
127.0.0.1:6379> dump not-exists-key #序列化不存在的值
(nil) #返回nil
127.0.0.1:6379>

1.8 TTL(ttl)


Redis TTL 命令以秒为单位返回 key 的剩余过期时间。


​语法​

127.0.0.1:6379> TTL KEY_NAME

​可以版本:​​>= 1.0.0

​返回值:​

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

**注意:**在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

​案例​

127.0.0.1:6379> flushall          #清空所有数据库数据
OK
127.0.0.1:6379> ttl j3-liuliang #判断一个不存在的key
(integer) -2
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> ttl j3-liuliang #查看存在的key但没有设置过期时间
(integer) -1
127.0.0.1:6379> expire j3-liuliang 100 #给存在的key设置过期时间
(integer) 1
127.0.0.1:6379> ttl j3-liuliang #查看剩余过期时间(秒)
(integer) 98
127.0.0.1:6379>

1.9 EXPIRE(expire)


Redis Expire 命令用于设置 key 的过期时间。key 过期后将不再可用。


​语法​

127.0.0.1:6379> Expire KEY_NAME TIME_IN_SECONDS

​可以版本:​​>= 1.0.0

​返回值:​

设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。

​案例​

127.0.0.1:6379> flushall          #清空所有数据库数据
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> expire j3-liuliang 100 #给存在的key设置过期时间
(integer) 1
127.0.0.1:6379> ttl j3-liuliang #查看剩余过期时间(秒)
(integer) 88
127.0.0.1:6379>

以上实例中我们为键 j3-liuliang设置了过期时间为 100秒,100秒后该键会自动删除。

1.10 DEL(del)


Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略。


​语法​

127.0.0.1:6379> DEL KEY_NAME

​可以版本:​​>= 1.0.0

​返回值:​​被删除 key 的数量。

​案例​

127.0.0.1:6379> flushall    #清空所有数据库数据
OK
127.0.0.1:6379> set k1 v1 #设置key并赋值
OK
127.0.0.1:6379> del k1 #删除key
(integer) 1 #返回删除的数量
127.0.0.1:6379> del k2
(integer) 0 #返回删除的数量 0 说明没有改变什么,表明该值不存在
127.0.0.1:6379>

1.11 PTTL(pttl)


Redis PTTL命令以​​毫秒​​为单位返回 key 的剩余过期时间。


​语法​

127.0.0.1:6379> PTTL KEY_NAME

​可以版本:​​>= 2.6.0

​返回值:​

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

**注意:**在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

​案例​

127.0.0.1:6379> flushall          #清空所有数据库数据
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> expire j3-liuliang 100 #设置过期时间
(integer) 1
127.0.0.1:6379> pttl j3-liuliang #返回key的剩余时间,毫秒
(integer) 91266
127.0.0.1:6379> pttl key #查看不存在key的剩余时间,毫秒
(integer) -2
127.0.0.1:6379> set k1 v1 #设置key并赋值
OK
127.0.0.1:6379> pttl k1 #查看没有设置过期时间的key
(integer) -1
127.0.0.1:6379>

1.12 RENAMENX(renamenx)


Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。


​语法​

127.0.0.1:6379> RENAMENX OLD_KEY_NAME NEW_KEY_NAME

​可以版本:​​>= 1.0.0

​返回值:​​修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0 。

​案例​

###################   第一种情况:newkey不存在(改名成功)   ###################
127.0.0.1:6379> flushall #清空数据库
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> renamenx j3-liuliang liuliang #将key设置新值,新值不存在
(integer) 1
127.0.0.1:6379> exists j3-liuliang #判断老key是否还存在
(integer) 0
127.0.0.1:6379> get j3-liuliang #判断是否还可以取到老key的值
(nil)
127.0.0.1:6379> exists liuliang #判断新key是否存在
(integer) 1
127.0.0.1:6379> get liuliang #获取新key的值
"18"
127.0.0.1:6379>

################### 第二种情况:newkey存在(改名失败,不做变化) ###################
127.0.0.1:6379> flushall #清空数据库
OK
127.0.0.1:6379> set k1 v1 #设置key并赋值
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> renamenx k1 k2 #将key设置新值,新值存在
(integer) 0 #重命名失败
127.0.0.1:6379> get k1 #没有任何变化
"v1"
127.0.0.1:6379> get k2 #没有任何变化
"v2"
127.0.0.1:6379>

1.13 EXISTS(exists)


Redis EXISTS 命令用于检查给定 key 是否存在。


​语法​

127.0.0.1:6379> EXISTS KEY_NAME

​可以版本:​​>= 1.0.0

​返回值:​​若 key 存在返回 1 ,否则返回 0 。

​案例​

127.0.0.1:6379> flushall    #清空数据库
OK
127.0.0.1:6379> exists k1 #判断key是否存在
(integer) 0 #不存在
127.0.0.1:6379> set k1 v1 #设置key并赋值
OK
127.0.0.1:6379> exists k1 #判断key是否存在
(integer) 1 #存在
127.0.0.1:6379>

1.14 EXPIREAT(expireat)

EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。


Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。


​语法​

127.0.0.1:6379> Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP

​可以版本:​​>= 1.0.0

​返回值:​

设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。

​案例​

127.0.0.1:6379> flushall              #清空数据库
OK
127.0.0.1:6379> set j3-liuliang 18 #设置key并赋值
OK
127.0.0.1:6379> expireat j3-liuliang 1293840000 #给key设置过期时间,时间是时间戳
(integer) 1
127.0.0.1:6379> ttl j3-liuliang #查看剩余过期时间
(integer) -2
127.0.0.1:6379> exists j3-liuliang #查看key是否还存在
(integer) 0
127.0.0.1:6379>

1.15 KEYS(keys)


Redis Keys 命令用于查找所有符合给定模式 pattern 的 key 。。


​语法​

127.0.0.1:6379> KEYS PATTERN

​可以版本:​​>= 1.0.0

​返回值:​​符合给定模式的 key 列表 (Array)。

​案例​

127.0.0.1:6379> flushall    #清空数据库
OK
127.0.0.1:6379> set k1 v1 #创建一些key
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set m1 n1
OK
127.0.0.1:6379> set m2 n2
OK
127.0.0.1:6379> keys k* #查找所有符合 k* 的key
1) "k1"
2) "k2"
127.0.0.1:6379> keys m* #查找所有符合 m* 的key
1) "m2"
2) "m1"
127.0.0.1:6379> keys * #查找所有的key
1) "m2"
2) "k1"
3) "m1"
4) "k2"
127.0.0.1:6379>

结束语


  • 本文结合​​Redis中文网​​和博主的实践案例所写,下期写String类型
  • 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
  • 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
  • 感谢您的阅读,十分欢迎并感谢您的关注。

超详细Redis之Key操作API,什么?看不懂!你来锤我_赋值



举报

相关推荐

0 条评论