【问题标题】:REDIS: Find all keys in an HSET that are missing a particular fieldREDIS:查找 HSET 中缺少特定字段的所有键
【发布时间】:2022-09-26 13:13:40
【问题描述】:

给定一些 HSET。

HSET \'TEST:1\' X 10
HSET \'TEST:1\' Y 20
HSET \'TEST:1\' Z 10 (First Set Keyed on \'TEST:1\')

HSET \'TEST:2\' X 10
HSET \'TEST:2\' Y 20 (Second Set Keyed on \'TEST:2\')

上面的第二组对 \'Z\' 没有任何价值

我将如何编写 LUA SCAN 来查找尚未设置 \'Z\' 值的所有 KEYS? 我不确定如何让脚本仅输出不存在关键字段的脚本。

是否可以在 SCAN 不阻塞的情况下编写一个?无论哪种方式都很好。

  • 1)你有一个保存所有哈希列表的键,或者你使用像keys *这样的东西? 2)如果您只想在不添加 z 的地方添加它,则可以对所有键执行此操作。我的意思是,您只需将它替换到它已经存在的地方(单独),然后将它添加到它不存在的地方,避免查找步骤来定位要更改的键。

标签: redis lua


【解决方案1】:

一种方法是,使用所有哈希图的名称创建一个集合,例如:

SADD ALLSETS TEST:1
SADD ALLSETS TEST:2

现在,当您在哈希图中添加子键(X、Y、Z)时,为每个子键创建一个集合:

SADD X:SETS TEST:1
SADD X:SETS TEST:2

SADD Y:SETS TEST:1
SADD Y:SETS TEST:2

SADD Z:SETS TEST:1

这意味着,现在您有了 X:SET ,其中包含所有包含 X 子键的哈希图。 类似地,您有 Y:SET,其中包含所有包含 Y 子键的哈希图的名称。

现在,讲一种集合论的语言,你的问题是:“ALLSETS”中存在哪些元素,但“Z:SETS”中没有,集合论中的这种操作称为差分操作(幸运的是,Redis 支持)

SDIFF ALLSETS Z:SETS
1)”TEST:2”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2021-11-25
    • 1970-01-01
    • 2015-06-25
    • 2019-10-03
    • 2013-05-08
    • 2021-05-11
    相关资源
    最近更新 更多