Redis模糊查找怎么弄,简单方法和内容介绍分享
- 问答
- 2025-12-26 05:30:49
- 1
Redis本身是一个键值存储数据库,它最直接的功能就是通过准确的键名来获取数据,在实际使用中,我们经常会遇到这样的情况:记不住完整的键名,或者想一次性找出所有符合某种规律的键,你想找出所有以“user:session:”开头的键来清理在线用户,或者找出所有包含“cache”关键词的键,这时候,就需要用到“模糊查找”功能了。
需要明确的是,Redis并没有一个像SQL语言中LIKE '%keyword%'那样的真正的“模糊查询”命令,我们所说的Redis模糊查找,实际上是通过模式匹配的方式来列出所有符合模式的键(keys),然后再根据这些键去获取对应的值,这个过程通常分两步走:第一步是匹配键,第二步是获取值。
核心命令:KEYS 和 SCAN
实现模糊查找,主要依赖两个命令:KEYS 和 SCAN,虽然它们的目标一样,但使用方式和适用场景有天壤之别。
KEYS 命令:简单但危险的“闪电侠”
(根据Redis官方文档对KEYS命令的描述),KEYS命令是最直观、最简单的模糊查找方法,它的语法是KEYS pattern。
-
模式(pattern)怎么用?
- (星号):匹配任意数量的任意字符,这是最常用的通配符。
KEYS *:会列出数据库中所有的键。这在生产环境下极其危险,绝对不能使用!KEYS user:*:会列出所有以user:开头的键,比如user:1001,user:1002:profile等。
- (问号):匹配一个任意字符。
KEYS user:10?:会匹配像user:101,user:102这样的键,但不会匹配user:1001。
[ ](中括号):匹配括号内的某一个字符。KEYS user:10[12]:只会匹配user:101和user:102。
- (星号):匹配任意数量的任意字符,这是最常用的通配符。
-
为什么说它危险?
KEYS命令的工作方式是遍历整个数据库的所有键,如果你的Redis数据库里存了几百万甚至上亿个键,执行一条KEYS *命令就会导致Redis服务器在很长一段时间内(可能是几秒甚至几十秒)卡住,无法响应其他任何操作,这就像让一个服务员停下所有工作,去清点仓库里每一件货品一样,会导致整个系统“假死”。KEYS命令绝对禁止在生产环境中使用,它只适合你在本地开发测试时,在数据量极小的情况下临时排查问题。
SCAN 命令:安全可靠的“慢跑者”
正因为KEYS命令有严重的性能问题,Redis从2.8版本开始引入了SCAN命令家族(包括SCAN, SSCAN, HSCAN, ZSCAN)。SCAN是生产环境下进行模糊查找的唯一正确选择。
-
SCAN是怎么工作的? (根据Redis官方文档对SCAN命令的迭代器概念解释),
SCAN命令采用了一种叫做“迭代器”的方式,它不会一次性遍历所有键,而是每次只扫描一小部分,然后返回一个“游标”(cursor)和本次扫描到的部分键,你可以拿着这个游标,再次调用SCAN命令,继续从上一次结束的地方开始扫描,这样就把一次性的巨大压力,分摊成了多次微小的操作,对服务器的影响可以忽略不计。 -
基本用法:
- 命令格式:
SCAN cursor [MATCH pattern] [COUNT count] cursor:游标,第一次调用时填0,表示开始一次新的迭代。MATCH pattern:匹配模式,和KEYS命令里的pattern用法完全一样,比如MATCH user:*。COUNT count:建议每次迭代返回的键数量,注意,这只是一个提示(hint),Redis不一定完全遵守,可能会返回比count多或少的键,默认值是10。
- 命令格式:
-
一个简单的例子: 假设我们想找出所有以
product:开头的键。- 第一次执行:
SCAN 0 MATCH product:* COUNT 5- 返回结果可能是一个数组,第一个元素是下一次迭代的游标(比如是
17),第二个元素是本次扫描到的键的列表(比如["product:1", "product:2"])。
- 返回结果可能是一个数组,第一个元素是下一次迭代的游标(比如是
- 第二次执行:
SCAN 17 MATCH product:* COUNT 5- 返回新的游标(比如是
0)和新的键列表。
- 返回新的游标(比如是
- 当你拿到返回的游标是
0时,就意味着整个遍历已经完成,可以结束了。
这个过程就像看书一样,
KEYS是要求你一口气读完,而SCAN是让你一页一页地读,读一页还可以休息一下处理别的事情。 - 第一次执行:
实际应用步骤
了解了命令之后,在实际编程中(比如用Python, Java等),进行模糊查找的步骤通常是:
- 使用SCAN命令迭代:在你的代码中,写一个循环,不断地调用
SCAN命令,并传入上一次返回的游标,直到游标变为0为止。 - 收集所有匹配的键:在每次
SCAN返回的结果中,将匹配到的键添加到一个集合或列表中。 - 根据键获取值:在遍历完所有键之后,你得到了一个完整的匹配键的列表,你可以再使用
GET、HGETALL、SMEMBERS等命令(取决于你键存储的数据结构)来批量获取这些键对应的具体值。
总结一下
- 需求:在Redis中实现类似“模糊查找”的功能。
- 本质:通过模式匹配先找到键,再通过键获取值。
- 核心命令:
- KEYS:简单粗暴,但会阻塞服务,仅用于测试,生产环境禁用。
- SCAN:通过游标分批遍历,安全高效,是生产环境的唯一选择。
- 使用模式:
SCAN命令需要配合循环使用,直到返回的游标为0才算遍历完成。 - 通配符:(多个字符),(单个字符),
[abc](匹配括号内任一字符)。
希望这份直接的内容介绍能帮助你清楚地理解如何在Redis中进行模糊查找,记住最关键的一点:在生产环境中,永远使用SCAN,忘掉KEYS。

本文由酒紫萱于2025-12-26发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/68603.html
