卡飞资源网

专业编程技术资源共享平台

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:100user:abc
  • KEYS session:? 将匹配像 session:asession: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来生成它并节省时间!


控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言