redis hmget with wildcard fields

时间:2016-01-19 14:11:54

标签: redis redis-cli

我在redis中有一个hashset,如下所示。

"abcd" : {
    "rec.number.984567": "value1",
    "rec.number.973956": "value2",
    "rec.number.990024": "value3",
    "rec.number.910842": "value4",
    "rec.number.910856": "...",
    "other.abcd.efgh": "some value",
    "other.xyza.blah": "some other value"
    "..." : "...",
    "..." : "...",
    "..." : "...",
    "..." : "..."
}

如果我调用hgetall abcd,它会给我哈希中的所有字段。我的目标是只获取以" rec.number"开头的hashset字段。当我打电话时

  redis-cli hmget "abcd" "rec.number*", 

它给了我一个像

的结果
1)

有没有办法只检索那些以我预期模式开头的键的数据?我想只检索那些键,因为我的数据集包含许多其他不相关的字段。

1 个答案:

答案 0 :(得分:3)

HMGET不支持字段名称中的通配符。您可以使用HSCAN

HSCAN abcd 0 MATCH rec.number*

有关SCANofficial docs功能的更多信息。

LUA方式

此脚本在LUA脚本中执行:

local rawData = redis.call('HGETALL', KEYS[1]);
local ret = {};

for idx = 1, #rawData, 2 do
    if string.match(rawData[idx], ARGV[1]) then
       hashData[rawData[idx]] = rawData[idx + 1];
    end 
end

A Guide for Redis Users中可以找到关于在Redis中使用redis-cli和LUA的简介。