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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 超详细Redis之Key操作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类型

由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。感谢您的阅读,十分欢迎并感谢您的关注。


image.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4月前
|
存储 缓存 NoSQL
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
|
1月前
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
1月前
|
存储 监控 NoSQL
Redis大Key问题如何排查?如何解决?
Redis大Key问题如何排查?如何解决?
77 0
Redis大Key问题如何排查?如何解决?
|
1月前
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?
|
1月前
|
API Docker 容器
如何免费获取 ChatGPT API Key?
上篇文章介绍了NextChat项目,只需配置ChatGPT API Key即可拥有私人ChatGPT网页应用。本文继续介绍免费获取API Key的来源——GPT_API_free,一个拥有13.6K Star的Github开源项目。需用Github账号绑定领取Key,支持gpt-3.5-turbo、embedding、gpt-4,但gpt-4每天限3次调用。GPT_API_free也提供付费版API,以支持项目持续运营。
925 0
如何免费获取 ChatGPT API Key?
|
2月前
|
NoSQL Unix Redis
Redis 键(key)
10月更文挑战第15天
43 1
|
2月前
|
缓存 监控 负载均衡
如何解决Redis热点Key问题?技术干货分享
【10月更文挑战第2天】在Redis的使用过程中,热点Key问题是一个常见的性能瓶颈。热点Key指的是那些被频繁访问的Key,它们可能导致Redis服务器的负载不均衡,进而影响整体性能。本文将深入探讨热点Key问题的成因、影响以及多种解决方案,帮助读者在实际工作中有效应对这一挑战。
127 3
|
2月前
|
NoSQL Redis
redis 的 key 过期策略是怎么实现的(经典面试题)超级通俗易懂的解释!
本文解释了Redis实现key过期策略的方式,包括定期删除和惰性删除两种机制,并提到了Redis的内存淘汰策略作为补充,以确保过期的key能够被及时删除。
61 1
|
3月前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
59 1
|
3月前
|
存储 缓存 NoSQL
Redis中大Key与热Key的解决方案
在工作中,Redis作为一款高性能缓存数据库被广泛应用,但常遇到“大key”和“热key”问题。“大key”指单个键包含大量数据,导致内存消耗高、性能下降及持久化效率降低;“热key”则是频繁访问的键,会引起CPU占用率高、请求阻塞等问题。本文详细分析了这些问题的定义、影响、原因,并提供了相应的解决方案,如合理设置缓存时间和数据结构、拆分大key、采用热点数据分片等方法。
295 4
Redis中大Key与热Key的解决方案