Redis里怎么快速查所有键和值,管理起来方便点的方法分享
- 问答
- 2026-01-02 02:43:02
- 5
最重要的一点是,*在生产环境中,绝对不要使用 `KEYS ` 命令来查找所有键**,这个命令是阻塞式的,它会扫描整个数据库,如果你的数据库里有几百万甚至上亿个键,这个命令会让Redis服务器卡住一段时间,无法处理其他任何请求,很可能导致线上服务瘫痪,这是一个必须牢记的底线。
有哪些更安全、更高效的方法呢?我们来分几个方面说。
安全地查找所有键
既然 KEYS * 不能用,我们用什么?
-
使用
SCAN命令:这是官方推荐的、用于替代KEYS命令的非阻塞式迭代器,它的原理不是一次性返回所有结果,而是每次只返回一小部分键和一个游标(cursor),你下次带着这个游标再执行SCAN,它就会从上次结束的地方继续扫描,这样就把一次性的巨大压力分摊成了多次微小的操作,对服务器的影响降到最低。- 怎么用:你第一次执行
SCAN 0(0代表从头开始),它会返回两部分:一个是下一次迭代要用的新游标(比如是123),另一个是本次扫描到的键的列表,然后你再执行SCAN 123,如此反复,直到返回的游标再次变成0,就意味着整个数据库都遍历完了。 - 优点:非阻塞,安全,可以用于生产环境。
- 小技巧:
SCAN命令也支持模式匹配,SCAN 0 MATCH user:*来查找所有以user:开头的键。
- 怎么用:你第一次执行
查看键对应的值
找到了键,我们自然想看它的值,但值可能有不同的类型(字符串、哈希、列表等),查看方法也不同。
- 对于字符串(String)类型:直接用
GET keyname命令。 - 对于哈希(Hash)类型:用
HGETALL keyname命令,它会把这个哈希的所有字段和值都列出来。 - 对于列表(List)类型:用
LRANGE keyname 0 -1命令,-1代表列表的最后一个元素,这样就能看全了。 - 对于集合(Set)类型:用
SMEMBERS keyname命令。 - 对于有序集合(Sorted Set)类型:用
ZRANGE keyname 0 -1 WITHSCORES命令,可以把成员和对应的分值都显示出来。
这里又有一个坑:如果一个键对应的值非常大(比如一个哈希里存了几十万个字段,或者一个字符串值有几百MB),直接用 HGETALL 或 GET 命令同样可能会拖慢Redis,因为网络传输和客户端渲染需要时间。
更稳妥的做法是:
- 先用
TYPE keyname命令看看这个键是什么类型。 - 再用
LLEN(列表长度)、HLEN(哈希字段数)、STRLEN(字符串长度)等命令判断一下值的大小,如果发现体积巨大,就要小心处理,可以考虑只查看一部分,比如用HSCAN(针对哈希的扫描)来分批获取字段,或者用LRANGE keyname 0 99只看列表的前100个元素。
使用图形化工具进行可视化管理
对于日常管理和排查问题来说,在命令行里一个个敲命令效率太低,而且不直观。使用图形化的管理工具是最高效、最方便的方法,这些工具底层也是调用我们上面说的那些安全命令(如 SCAN),但把它们包装成了非常友好的界面。
-
RedisInsight:这是Redis官方推出的免费可视化工具,非常强大和推荐,它的主要好处包括:
- 树状视图浏览:可以用文件夹树的形式展示你的键,特别是如果你的键名有层次结构(
user:1000:profile,user:1000:orders),它会自动归类,查找起来一目了然。 - 安全执行命令:它内置了一个CLI,让你可以像在终端里一样执行命令,但更安全方便。
- 内存分析:它有一个很棒的功能,可以分析你的数据库,告诉你哪种类型的键最多,哪个键占的内存最大,对于优化和清理非常有用。
- 实时监控:可以实时看到服务器的CPU、内存、命令统计等监控信息。
- 树状视图浏览:可以用文件夹树的形式展示你的键,特别是如果你的键名有层次结构(
-
Another Redis Desktop Manager:这是一个在开发者中非常流行的开源桌面客户端,它界面简洁,响应速度快,基本功能齐全,支持Windows、macOS和Linux,它也能以树状结构展示键,方便地查看和编辑各种数据类型的值。
-
redis-commander:这是一个基于Web的Redis管理工具,你可以在服务器上部署它,然后通过浏览器来访问和管理Redis,这对于管理远程服务器或Docker环境中的Redis特别方便。
一些管理上的小建议
除了工具,一些好的习惯也能让管理变得更轻松:
- 键名规范化:使用统一的命名规范,比如用冒号分隔层次,
业务:模块:ID(order:payment:20231027),这样无论是用SCAN命令匹配,还是在图形化工具里浏览,都会非常清晰。 - 设置TTL(过期时间):对于缓存类数据,一定要设置合理的过期时间,可以使用
TTL keyname查看剩余时间,用EXPIRE keyname seconds来设置,这样可以避免无用数据无限期地占用内存。 - 定期清理:利用图形化工具的内存分析功能,定期检查是否有已经过期但还未被删除的大Key,或者一些不再使用的僵尸Key,并手动清理掉。
总结一下:核心就是*放弃危险的 `KEYS 命令,拥抱安全的SCAN` 系列命令,而对于日常管理,强烈建议使用像 RedisInsight 这样的图形化工具**,它能将安全命令的强大能力和可视化操作的便捷性完美结合,让你管理Redis的效率大大提升,真正做到既快速又方便。

本文由颜泰平于2026-01-02发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/72818.html
