无法将'KEYS'与redis-cluster一起使用

时间:2019-07-17 06:29:24

标签: php caching redis redis-cluster predis

我正在处理的应用程序之一已从redis移至redis cluster。现在,我一直在使用keys命令来获取键空间下的所有键。但是现在它说Cannot use 'KEYS' with redis-cluster。我用Laravel编写的应用程序正在使用Predis作为Redis客户端。

我将树响应存储在redis中,并且位于parent:child:ItemID格式的命名空间下。所以我有

 parent:child:1
 parent:child:2
 parent:child:3

,并且每个键都有与之关联的JSON。我正在获取通过密钥循环的每个JSON条目。代码如下:

$keys = $this->redis->keys('parent:child:*');

if (!empty($keys)) {
    foreach ($keys as $key) {
        $cacheData[] = json_decode($this->redis->get($key));
    }
}

现在,这将返回上述错误。是否有其他方法可以获取此指定名称空间下的所有数据?

1 个答案:

答案 0 :(得分:0)

来自官方Redis documentation

  

警告:将KEYS视为仅应格外小心的生产环境中使用的命令。在大型数据库上执行时,可能会破坏性能。此命令用于调试和特殊操作,例如更改键空间布局。不要在常规应用程序代码中使用KEYS。如果您正在寻找在密钥空间的子集中查找密钥的方法,请考虑使用SCAN或集。

如果您使用的是predis,则可以在此example中这样做:

foreach (new Iterator\Keyspace($this->redis, 'parent:child:*') as $key) {
    $cacheData[] = json_decode($this->redis->get($key));
}