You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何获取Redis缓存中的所有键?

Laravel Redis集群下获取所有缓存键的解决方案

Redis集群模式下,KEYS和SCAN无法直接通过Laravel默认的Redis门面全局执行,因为这类命令是单节点级别的操作,必须遍历集群中的每个节点分别执行。

实现步骤(以Predis客户端为例)

通过Redis集群客户端逐个访问主节点,在每个节点上执行SCAN命令并合并结果:

use Illuminate\Support\Facades\Redis;

// 获取Redis集群客户端实例
$clusterClient = Redis::connection()->client();
$allCacheKeys = [];

// 遍历集群所有主节点
foreach ($clusterClient->_masters() as $masterNode) {
    // 获取对应节点的客户端
    $nodeClient = $clusterClient->getClientForSlot($masterNode['slot']);
    $cursor = '0';

    // 循环执行SCAN直到游标归0
    do {
        $scanResult = $nodeClient->scan($cursor, ['match' => '*', 'count' => 1000]);
        $cursor = $scanResult[0];
        $allCacheKeys = array_merge($allCacheKeys, $scanResult[1] ?? []);
    } while ($cursor !== '0');
}

// 返回所有缓存键
return response()->json(['cache_keys' => $allCacheKeys]);

注意事项

  • 若使用phpredis客户端,集群节点遍历方式需调整,可通过getNodes()方法获取所有节点,再筛选主节点($node->isMaster())。
  • 生产环境避免使用match => '*'全量扫描,建议指定缓存前缀(比如your-app-prefix:*)减少扫描范围,降低Redis性能影响。
  • SCAN命令的count参数只是提示值,实际返回的键数量可能波动,无需严格匹配设定值。

内容的提问来源于stack exchange,提问作者Drew Gallagher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:33:14