【问题标题】:How to find redis keys using regex in PHP redis?如何在 PHP redis 中使用正则表达式查找 redis 键?
【发布时间】:2018-03-21 11:21:45
【问题描述】:

在 Redis 中,我有以下格式的键:

25-1521624987
25-1521624000
25-1521624900
30-1521624900
30-1521624000
35-1521624100

我编写了以下代码来提取 Redis 记录,其中的键以数字 25 开头。

 $tokens = $rdb->keys("^25-*");
 print_r($tokens);

但是我用上面的代码得到的结果是一个空数组。
虽然正则表达式在 Redis 桌面管理器中工作。

在 PHP redis 中获取所需结果的正确方法是什么?

【问题讨论】:

  • $tokens = $rdb->keys("25-*"); 做吗?
  • 也许^25-\d*
  • * 元字符量化它之前的任何内容。所以当你说-* 你说的是任意数量的破折号。当然,这不会匹配任何东西。您可能打算使用^25-.* 或更好的^25-\d*
  • 我更多的是在 Redis 文档中的示例 (redis.io/commands/keys) - 'h*llo 匹配 hllo 和 heeeello'

标签: php regex redis phpredis


【解决方案1】:

来自文档 (https://github.com/phpredis/phpredis#keys-getkeys)...

$allKeys = $redis->keys('*');   // all keys will match this.
$keyWithUserPrefix = $redis->keys('user*');

因此,我不得不假设它没有使用正则表达式,您应该使用...

 $tokens = $rdb->keys("25-*");
 print_r($tokens);

【讨论】:

  • 谢谢。您的上述解决方案有效。我想这是文档的错。应该提到该模式不是正则表达式。在模式中看到 * 让我觉得它是一个正则表达式,我尝试了所有类型的正则表达式来使其工作。
  • 我认为有些系统在 redis 之上构建了自己的层以允许您使用正则表达式,但我认为他们只是读取所有键然后在本地应用正则表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多