Laravel Redis如何获取所有前缀匹配的HMSET哈希数据

问题根因
HGETALL 是针对单个确定Hash键的读取命令,不支持通配符匹配。你传入hmset_demo:user_id:*时,Redis会把这串字符当成完整的键名去查找——你根本没有存储过这个名称的键,自然返回空数组。
你之前传入确定ID的完整键名能正常拿到数据,恰恰是因为符合HGETALL的参数要求。
正确实现方案
要拿到所有该前缀下的Hash数据,必须分两步操作:
- 扫描出所有匹配
hmset_demo:user_id:*规则的真实键名 - 遍历所有匹配到的键,逐个调用
HGETALL读取内容,最后组装成你需要的列表结构
注意:生产环境禁止直接用
KEYS命令扫键,这个命令会全量遍历Redis所有键,数据量大时会阻塞整个服务,优先用游标式的SCAN命令分批扫描。
对应代码示例(适配PHP Redis封装)
$userList = []; $iterator = null; // 每次扫100个匹配前缀的键,不会阻塞服务 while ($keys = Redis::scan($iterator, 'hmset_demo:user_id:*', 100)) { foreach ($keys as $key) { $hashData = Redis::hgetall($key); if ($hashData) { $userList[] = $hashData; } } } // $userList 就是你期望得到的数组结构
内容的提问来源于stack exchange,提问作者Jaden Leong
相关产品推荐
相关产品推荐

