带有通配符字段的 redis hmget

标签 redis redis-cli

我在 redis 中有一个哈希集,如下所示。

"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”开头的字段。当我打电话时

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

它给了我这样的结果

1)

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

最佳答案

HMGET字段名称不支持通配符。您可以使用HSCAN为此:

HSCAN abcd 0 MATCH rec.number*

更多关于SCAN函数位于 official 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

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

关于带有通配符字段的 redis hmget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34879019/

相关文章:

mongodb - 为服务/数据/缓存部署多个实例的好处

binary - Redis 和转义二进制数据

redis - 与 RabbitMQ 相比,将 Redis Pub/Sub 用于消息队列是否可靠

redis - Redis命令HMSET有字段数限制吗?

ubuntu - redis.conf 文件未加载更改

lua - Lua 中的 cjson 解码返回空数组 redis-cli

redis - 清除 Windows 机器上的 Redis-Cli 历史记录

amazon-web-services - 如何在 AWS EC2 而不是 ElastiCache 上安装/管理 Redis 集群?

memory - 对象的 Redis 编码和大小影响

Redis 增加一个数值 - ERR 值不是整数或超出范围