Redis模式匹配:如何有效使用KEYS和SCAN命令
东城
·
2026-01-31
在使用Redis时,您经常会发现自己需要检索遵循特定模式的键。也许您已经存储了用户会话,键名如
session:user123
、
session:user456
等——现在您想要找到所有以
session:
开头的键。
Redis提供了几个命令来帮助实现这个功能:
KEYS
和
SCAN
。它们乍看起来可能很相似,但行为却非常不同,了解何时以及如何使用每个命令很重要。
1.
Redis中的通配符模式匹配
KEYS
和
SCAN
都支持
glob风格的模式
,使用特殊的通配符字符来匹配多个键:
模式
匹配...
\
任意数量的字符
?
恰好一个字符
\[abc\]
a、b或c中的一个字符
\[a-z\]
a到z之间的任意字符
例如:
KEYS
user:
将匹配
user:1
、
user:100
和
user:abc`。
KEYS
session:?
将匹配像
session:a
、
session:1
这样的键,但不匹配
session:ab
。
2.
KEYS命令:强大,但在生产环境中危险
KEYS
命令简单直接:
127
.
0
.
0
.
1
:
6379
>
KEYS
user
:*
它返回
所有匹配给定模式的键
,并且这是
一个阻塞操作
。这是主要问题——Redis在收集所有结果时会暂停,这在具有大量键的生产环境中可能是有风险的。
何时使用
KEYS
用于调试或开发。
当键的总数很小时。
当您确定性能不会受到影响时。
3.
SCAN命令:安全和基于游标
为了安全地扫描大型键空间,Redis提供了
SCAN
命令。它是一个
基于游标的迭代器
,意味着它不会一次性返回所有匹配的键。相反,它给您一个
小的子集
键和一个
游标
来继续。
127
.
0
.
0
.
1
:
6379
>
SCAN
0
MATCH
user
:*
COUNT
10
0
是初始游标位置。
MATCH
是模式过滤器。
COUNT
是返回多少键的提示(不保证)。
您使用前一个响应中返回的游标重复命令,直到游标返回到
0
,这表示扫描结束。
示例输出
1
)
"23"
# 下一个游标
2
)
1
)
"user:1"
2
)
"user:2"
然后您调用
SCAN
23
MATCH
user:
COUNT
10
来继续。
何时使用
SCAN
在生产系统中。
当处理大量键时。
当您需要非阻塞访问时。
4.
最佳实践
在生产环境中避免使用
KEYS
。
始终使用
SCAN
进行可扩展、安全的键迭代。
考虑为您的键命名空间(例如,
user:
、
order:
等),使模式匹配更容易。
不要依赖
COUNT
返回确切的数字——这只是对Redis的建议。
总结
基于模式的键检索是Redis中的一个强大功能,但像所有强大的工具一样,应该谨慎使用。对于开发中的快速查找,
KEYS
很方便。对于可扩展和生产安全的迭代,
SCAN
是您的最佳选择。
如果您是一个喜欢探索不同技术和技巧的软件开发者,请查看LiveAPI。这是一个超级方便的工具,可以让您立即生成交互式API文档。
LiveAPI帮助您轻松发现、理解和使用大型技术基础设施中的API!
所以,如果您正在处理缺乏文档的代码库,只需使用LiveAPI来生成它并节省时间!
您可以立即在这里试用!🚀
Aa