当前位置: 首页 > 面试题库 >

Redis hmget与通配符字段

拓拔骁
2023-03-14
问题内容

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

"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功能的更多信息。

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-cli在Redis中使用LUA的很好的介绍,可以在《Redis用户指南》中找到。



 类似资料:
  • null 为什么我不能在MyList中添加对象。因为如果我们使用super,这意味着这个列表可以包含在Java类的继承制度中等于或高于number的对象。因此应该按照该语句在列表中添加新的Object()。 多谢了。

  • 问题 你想使用 Unix Shell 中常用的通配符(比如 *.py , Dat[0-9]*.csv 等)去匹配文本字符串 解决方案 fnmatch 模块提供了两个函数—— fnmatch() 和 fnmatchcase() ,可以用来实现这样的匹配。用法如下: >>> from fnmatch import fnmatch, fnmatchcase >>> fnmatch('foo.txt',

  • 比如说我有这个: 我想做两件事: 1) 使其成为当且仅当用户准确键入<代码>时!测试和其他内容,它将在通道中打印出测试 2)使其成为如果用户键入首先后跟空格和至少一个其他字符串字符,它将打印出——例如:a)不会打印出任何东西,b)(后跟一个空格)不会打印出任何东西,c)不会打印出任何东西,d)不会打印出任何东西,但是e)将打印出, f)将打印出, g)将打印出, and h)将打印出等。 我只知道

  • 这个问题的答案表明,当方法采用通配符泛型类型时,可以访问或修改集合,但不能同时访问或修改集合。(凯西和伯特) 据我所知,方法do1有,因此d2只能被访问,不能被修改。方法d2具有,因此可以访问和修改c2,并且没有编译错误。 通用指南

  • 问题内容: 这应该非常简单。如果我有这样的字符串: 那么通常会采用什么方式来获取与此模式匹配的文件列表?(例如,它应该匹配但不匹配 我看了一下,看起来像是对的野兽,但是我不确定如何使用它在相对目录路径中查找文件。 我想我可以查找ant的源代码,因为它使用了通配符语法,但是我必须在这里遗漏一些显而易见的内容。 (编辑:上面的示例只是一个示例案例。我正在寻找一种在运行时解析包含通配符的常规路径的方法。