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
相关产品推荐
相关产品推荐

