Redis模式匹配:如何有效使用KEYS和SCAN命令

在使用Redis时,您经常会发现自己需要检索遵循特定模式的键。也许您已经存储了用户会话,键名如session:user123session:user456等——现在您想要找到所有以session:开头的键。
Redis提供了几个命令来帮助实现这个功能:KEYSSCAN。它们乍看起来可能很相似,但行为却非常不同,了解何时以及如何使用每个命令很重要。
1. Redis中的通配符模式匹配
KEYSSCAN都支持glob风格的模式,使用特殊的通配符字符来匹配多个键:
模式
匹配...
\
任意数量的字符
?
恰好一个字符
\[abc\]
a、b或c中的一个字符
\[a-z\]
a到z之间的任意字符
例如:
KEYS user: 将匹配 user:1user:100 user:abc`。
KEYS session:? 将匹配像 session:asession:1 这样的键,但不匹配 session:ab
2. KEYS命令:强大,但在生产环境中危险
KEYS命令简单直接:
  1. 127.0.0.1:6379> KEYS user:*
它返回所有匹配给定模式的键,并且这是一个阻塞操作。这是主要问题——Redis在收集所有结果时会暂停,这在具有大量键的生产环境中可能是有风险的。
何时使用KEYS
用于调试或开发。
当键的总数很小时。
当您确定性能不会受到影响时。
3. SCAN命令:安全和基于游标
为了安全地扫描大型键空间,Redis提供了SCAN命令。它是一个基于游标的迭代器,意味着它不会一次性返回所有匹配的键。相反,它给您一个小的子集键和一个游标来继续。
  1. 127.0.0.1:6379> SCAN 0 MATCH user:* COUNT 10
0 是初始游标位置。
MATCH 是模式过滤器。
COUNT 是返回多少键的提示(不保证)。
您使用前一个响应中返回的游标重复命令,直到游标返回到0,这表示扫描结束。
示例输出
  1. 1) "23" # 下一个游标
  2. 2) 1) "user:1"
  3. 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来生成它并节省时间!
您可以立即在这里试用!🚀