前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >获取Redis中所有的键

获取Redis中所有的键

作者头像
吉林乌拉
发布2019-10-15 16:46:19
7.9K0
发布2019-10-15 16:46:19
举报
文章被收录于专栏:吉林乌拉吉林乌拉

在日常的开发中我们有时会要遍历Redis中的所有的键,我们在之前的文章中已经介绍过了,我们可以用keys命令来获取所有的键,那么在Redis中除了keys命令之外,我们还可以使用scan命令获取。下面我们将详细了解一下这两种命令的相关内容。

1.全量遍历键

代码语言:javascript
复制
keys pattern

在之前的文章中我们已经介绍过了,可以直接使用

代码语言:javascript
复制
keys *

命令来遍历Redis中的所有键,那么实际上keys命令也是可以支持pattern匹配的。下面我们通过例子演示一下上面所说的内容。

下面我们看一下pattern通配符的详细说明:

代码语言:javascript
复制
- * 代表匹配任意字符
- ? 代表匹配一个字符
- [] 代表匹配部分字符,例如[1,3]代表匹配1和3,而[1-10]代表匹配1到10的任意数字。
- x 转移字符,例如要匹配星号,问号需要转义的字符

下面我们继续看相关用例。

Redis中的keys命令是很实用的命令,例如如果我要删除指定名字开头的键时,也可以使用keys命令先查找,然后在执行删除。具体命令如下:

代码语言:javascript
复制
./redis-cli keys j* | xargs ./redis-cli del

备注:在执行上述删除命令时,是不需要在Redis客户端中执行时的。

我们知道在Redis中是单架构的,所以在执行keys命令时有时会造成阻塞,所以我们在使用keys命令时要慎用。下面我们看一下,使用keys命令的注意事项。

  • 因为keys命令是会阻塞的,所以我们在使用keys命令时,要在非业务的客户端中进行,这样即使keys命令会阻塞,也不会影响相关的业务。
  • 如Redis中的键总数比较少时,可以直接使用keys命令。
  • 如果Redis中的键的总数比较多,并且我们不得不在业务环境的客户端如生产环境客户端中获取所有键时,那我们可以使用scan命令,因为该命令不会对客户端造成阻塞。

下面我们了解一下Redis中scan命令。

2.渐进式遍历

Redis在2.8版本之后,提供了scan命令,用这个命令可以有效的解决keys命令阻塞的问题。但scan命令和keys命令不同,scan命令是采用渐进式方式遍历键的。并且scan命令的时间复杂度为O(1)。所以scan命令如果要实现keys命令的功能,则要执行很多次scan命令。因为在Redis中键的存储实际上使用的是hashtable数据结构。所以我们在使用scan命令时,可以理解为只获取字典的一部分,如果要获取到所有键时,则要调用多次scan命令。

代码语言:javascript
复制
scan cursor [MATCH pattern] [COUNT count]

下面我们详细介绍一下scan命令的相关参数说明:

  • cursor: 必须参数,cursor是一个游标参数,第一次遍历时游标从0开始,每次scan遍历完都会返回当前游标的值。
  • MATCH pattern: 可选参数,和keys中的pattern参数一样。
  • COUNT count: 可选参数,count参数指的是scan命令每次返回键的个数。

下面我们看一下scan命令的相关例子。 就向上面执行的scan命令一样,scan命令每次执行完都会返回,上次cursor的参数,当cursor参数为0时,则表示,Redis中的所有的键都已经遍历完了。

在Redis中除了scan命令外,还提供了hscan、sscan、zscan等命令,它们的使用方式,均和scan命令一样。

下面我们看一下scan命令的注意事项。

  • 优势:可以解决keys命令中命令阻塞的问题。
  • 劣势:如果使用scan命令时,如果Redis中的键发生了变化例如:增加、删除、修改等操作时,scan命令可能会遇到遍历不到所有键的情况,这也是我们在使用scan命令遍历的键特别要注意的事项。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吉林乌拉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档