暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis每日一练(14):KEYS、TYPE和RENAME命令

原创 AlbertS 2019-12-14
1765

版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议

前言

再来看三个可能会用到的操作键的命令,这三个命令有些杂,彼此之间没有什么关系,KEYS 可以根据模式串找符合条件的键,TYPE 用于查询一个键的类型,而 RENAME 用于重命名,接下来看一下具体的用法。

KEYS

  • 最早出现版本:1.0.0
  • 时间复杂度:O(1)
  • 命令参数:KEYS pattern
  • 操作类型:keys
  • 官方文档

作用

其实这是个查找命令,但外表看起来一点也不像,感觉查找命令应该写成 getkeys 更能说明功能吧,可是官方确实定义成了 KEYS,如果有一点正则表达式的经验,对这个匹配模式应该很熟悉,keys 可以通过模式串找到一系列的键,其中有些是常用的:

  • * 可以匹配任意长字符,例 n*me 可以匹配 nmenamenzzme 等等
  • ? 可以匹配一个任意字符,例如 n?me 可以匹配 namenzme,但是无法匹配 nabme,因为多了一个字符
  • [ad43] 可以表示匹配可选集,例如 n[ab]me 只可以匹配 namenbme,无法再匹配其他的
  • [0-9] 是上一种的简写方式,代表了[0123456789],其他范围也可以简写,比如匹配小写字母[a-z]
  • [^ab] 反向匹配,匹配集合中出现^表示不匹配集合中的内容,例 n[^ab]me 可以匹配 nzme,但无法匹配 name

练习

查找出Redis数据中所有的键,只用一个*就可以了,因为 * 可以匹配任意长度的任何字符。

127.0.0.1:6379> KEYS *
 1) "user"
 2) "score"
 3) "num"
 4) "key"
 5) "count"
 6) "length"
 7) "namr"
 8) "address"
 9) "str"
10) "weight"
11) "user:1001"
127.0.0.1:6379>
复制

以上就是我这段时间以来做测试设置的所有键,Redis 的官方文档中提到,使用这个命令时应该小心谨慎,可以用在调试过程或者一些特殊的情况,最好不要用在常规代码中,因为随着时间的推移可能引发效率问题,虽说 Redis 很快,但是如果不加节制,数据库中的键太多了,使用这个命令还是会带来效率问题。

TYPE

  • 最早出现版本:1.0.0
  • 时间复杂度:O(1)
  • 命令参数:TYPE key
  • 操作类型:keys
  • 官方文档

作用

很简单的一个工具命令,查询键的类型,返回值有 stringhashlistsetzsetstream 几种,如果查询的键不存在则返回 none

练习

查询一个常用的键的类型和一个不存在的键的类型:

127.0.0.1:6379> SET name albert
OK
127.0.0.1:6379> GET name
"albert"
127.0.0.1:6379> TYPE name
string
127.0.0.1:6379> GET haha
(nil)
127.0.0.1:6379> TYPE haha
none
127.0.0.1:6379>
复制

RENAME

  • 最早出现版本:1.0.0
  • 时间复杂度:O(1)
  • 命令参数:RENAME key newkey
  • 操作类型:keys
  • 官方文档

作用

重新命名键的名字,几乎每天都会用到重命名,文件重命名,备注重命名,而在 Redis 中也有 RENAME 命令,可以将一个旧的键名修改成新的名字,如果这个新名字原来已经存在了,那么原来的键被覆盖,因为这个命令可能会音势的调用 DEL 命令,所以在删除一个大数据的键时可能会产生较高延时。

在集群模式下,要求新旧两个键名必须在相同的散列槽内,在3.2.0版本以前新旧键名如果相同会报错的。

练习

修改一个键的名字然后再改回来:

27.0.0.1:6379> SET name albert
OK
127.0.0.1:6379> GET name
"albert"
127.0.0.1:6379> RENAME name firstname
OK
127.0.0.1:6379> GET name
(nil)
127.0.0.1:6379> GET firstname
"albert"
127.0.0.1:6379> RENAME firstname name
OK
127.0.0.1:6379> GET firstname
(nil)
127.0.0.1:6379> GET name
"albert"
127.0.0.1:6379>
复制

总结

  1. KEYS 命令可以根据模式串找到符合条件的键的列表,最好学习点正则表达式的知识。
  2. TYPE 命令返回指定键的类型,如果不存在返回none。
  3. RENAME 命令可以将键重命名,命名成功会返回OK。

2019-12-3 20:38:18

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论