用Redis怎么快速查所有键和值,顺便看看都有哪些数据存着
- 问答
- 2026-01-18 14:43:19
- 2
*在生产环境中,绝对不要使用 `KEYS 命令来查看所有键。** 这是很多刚开始使用Redis的人最容易犯的错误,原因在于,Redis是单线程的,这意味着它在任何一个时刻只能处理一个命令。KEYS *` 命令会一次性遍历整个数据库的所有键名,如果你的数据库里有几百万甚至上亿个键,这个命令会长时间阻塞Redis服务器,导致在此期间所有其他客户端发来的读写请求全部无法响应,很可能引发线上服务雪崩,这是一个非常危险的操作,任何负责任的教程或文档都会首先强调这一点。
正确、安全的方法是什么呢?答案是使用 SCAN 命令。SCAN 命令的优势在于它是迭代式的、非阻塞的,它不会一次性返回所有键,而是每次只返回一小部分(比如几十个或几百个),并给你一个游标(cursor),你可以拿着这个游标再次调用 SCAN,继续获取下一批键,这样就把一个庞大的、耗时的操作,分解成了很多个快速的、小型的操作,虽然从整体上看,遍历所有键的总时间可能比 KEYS * 还要长一点,但在这个过程中,Redis服务器依然能够正常处理其他客户端的请求,不会造成服务中断。
如何使用 SCAN 命令查找所有键:
SCAN 命令的基本用法是 SCAN cursor [MATCH pattern] [COUNT count]。

cursor:游标,第一次遍历时从0开始,每次命令返回后会给你一个新的游标。MATCH pattern:可选参数,用来匹配键的模式,user:*表示查找所有以user:开头的键。COUNT count:可选参数,提示Redis每次返回大约多少个键,但这只是一个提示,实际返回的数量可能多也可能少,默认值是10。
遍历的过程是一个循环:
- 第一次调用
SCAN 0,Redis会返回两个值:一个是下一次迭代需要的游标(比如是45),另一个是本次扫描到的键的列表。 - 第二次调用
SCAN 45,又返回一个新的游标(比如是109)和一批新的键。 - 如此反复,直到Redis返回的游标是
0,这表示整个数据库已经被遍历完毕,所有键都已经被找出来了。
这个过程非常适合用脚本(比如Shell脚本、Python脚本)来自动化完成,你可以写一个简单的循环,不断调用 SCAN 直到游标归零,然后把所有键收集到一个列表里。
如何查看键对应的值?

拿到了所有键的列表后,下一步就是查看它们的值了,这里没有一条命令能直接“获取所有键值对”,你需要对每个键单独使用类型对应的查询命令,因为Redis支持多种数据结构(字符串、哈希、列表、集合、有序集合等),所以在获取值之前,你最好先知道这个键存储的是什么类型的数据,可以使用 TYPE keyname 命令来查看键的类型。
根据不同的类型,使用不同的命令来获取值:
- 字符串(String):这是最简单的,直接用
GET keyname。 - 哈希(Hash):使用
HGETALL keyname,它会把这个哈希表的所有字段和值都列出来。 - 列表(List):使用
LRANGE keyname 0 -1,-1表示列表的最后一个元素,这样就能获取整个列表。 - 集合(Set):使用
SMEMBERS keyname,列出集合中的所有成员。 - 有序集合(ZSet):使用
ZRANGE keyname 0 -1 WITHSCORES,会列出所有成员及其对应的分数。
一个实际的浏览场景:

假设你只是想快速浏览一下数据库里存了些什么,而不是要程序化地处理所有数据,一个比较高效的做法是结合使用 SCAN 和 TYPE 命令,再抽样查看。
- 先用
SCAN命令迭代,每次获取一小批键(比如20个)。 - 对于这一批键,你可以用
TYPE命令快速查看它们的类型。 - 从中挑选几个有代表性的键,根据其类型使用上面的取值命令看看具体内容,你看到有几个键是
user:profile:1001,类型是hash,你就可以用HGETALL user:profile:1001看看里面到底存了用户的哪些信息(名字、年龄等),看到一些page:view:20240501这样的键,类型是string,可以用GET看看是不是当天的页面访问量。
通过这种抽样查看的方式,你就能对数据库里存了哪些数据有一个大致的了解,同时又避免了性能风险。
其他有用的诊断命令:
除了上面说的,还有几个命令能帮你了解数据的宏观情况,而不用遍历每一个键:
INFO keyspace:这个命令会简洁地列出所有数据库(db0, db1等)的统计信息,主要是每个数据库的键数量(keys)和设置过期时间的键数量(expires),这能让你快速知道数据大概有多大。DBSIZE:直接返回当前数据库的键总数,非常快,不会阻塞服务。
总结一下安全快速的步骤:
- 绝对不用
KEYS *。 - 用
DBSIZE和INFO keyspace快速了解数据规模。 - 用
SCAN命令迭代式、分批次地获取所有键名。 - 用
TYPE命令查看关键键的类型。 - 根据类型,用
GET、HGETALL、LRANGE等命令抽样查看具体内容。
如果你有权限并且环境允许,使用像RedisInsight这样的图形化管理工具会是更直观的选择,这些工具在背后也是使用 SCAN 等命令,但它们提供了友好的界面,可以让你方便地浏览键、查看值、分析内存使用情况,比自己敲命令要省事很多。
本文由称怜于2026-01-18发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/83093.html
