首页 > 解决方案 > 无法将“KEYS”与 redis-cluster 一起使用

问题描述

我最近正在处理的应用程序之一redisredis 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));
    }
}

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

标签: phpcachingredisredis-clusterpredis

解决方案


来自Redis官方文档

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

如果您正在使用predis,您可以在此示例中执行以下操作:

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

推荐阅读