如何在PHP Redis中使用正则匹配Redis键?代码无结果问题解决
解决PHP Redis中匹配指定前缀键的问题
你遇到的问题根源在于:PHP Redis扩展的keys()方法并不支持正则表达式,它遵循的是Redis原生的glob匹配规则,而Redis Desktop Manager里的搜索可能默认使用了正则语法,所以才会出现两边表现不一致的情况。
正确的写法
要匹配所有以25-开头的键,直接用glob模式的25-*即可:
$tokens = $rdb->keys("25-*"); print_r($tokens);
为什么之前的写法无效?
你写的^25-*在正则表达式里是“匹配以25开头的字符串”,但在Redis的glob模式中:
^只是一个普通字符,不是行首匹配符*代表匹配任意长度的任意字符
所以Redis会去寻找字面量以^25开头的键,自然找不到你实际存在的25-xxxxxx格式的键。
生产环境的最佳实践
另外要提醒你:keys()命令会遍历整个Redis数据库,当数据量较大时会阻塞服务器,影响性能。如果是在生产环境中,更推荐使用scan()命令分批获取匹配的键,示例代码如下:
$iterator = null; $matchedKeys = []; // 循环扫描直到遍历完所有键 while ($keys = $rdb->scan($iterator, "25-*")) { $matchedKeys = array_merge($matchedKeys, $keys); } print_r($matchedKeys);
内容的提问来源于stack exchange,提问作者Rishav Medhi
相关产品推荐
相关产品推荐

