gpt4 book ai didi

indexing - 原子添加/删除索引(集合)值到 Redis 中的哈希属性

转载 作者:IT王子 更新时间:2023-10-29 06:12:57 27 4
gpt4 key购买 nike

如何使用 Stackexchange.redis 对哈希属性的索引进行建模,以便我可以自动删除哈希索引值?

例如:

Hash       -> Key=1    Value={ FirstName="Bob", LastName="Smith", Etc=...}
Key=2 Value={ FirstName="Sue", LastName="Smith", Etc=...}

Set(index) -> Key=FirstName:Bob Value={1}
Key=FirstName:Sue Value={2}
Key=LastName:Smith Value={1,2}

在上面的例子中,当一个新的 Hash 被添加为 LastName:Smith 的值时,我可以使用 .StringAppend() 为其对应的值添加一个值索引(集合)。

如果我需要使用 Key=2 删除 Hash,我如何从存储在索引 (Set) Key 中的值中自动删除 2 =姓氏:史密斯?

为了按属性查询哈希,我是否需要调整我的模型以适应更高效的索引?

也感谢对我的措辞进行的任何增加清晰度的调整。

~谢谢

更新我学到的东西:

  • Set 只是键/值对(我的术语)的值部分。
  • Redis 具有操作集合成员 的命令。特别是 SADDSREM。我不必对 Value 进行完整操作,从而提示这个 SO 问题。

最佳答案

如果你需要原子性,你必须使用 EVAL 或 MULTI。例如:

添加元素

eval "redis.call('hset',KEYS[1],KEYS[2],KEYS[3],KEYS[4],KEYS[5]) redis.call('sadd',KEYS[2]..':'..KEYS[3],KEYS[1]) redis.call('sadd',KEYS[4]..':'..KEYS[5],KEYS[1])" 5 3 FirstName Bob LastName Marley

127.0.0.1:6370> smembers LastName:Marley
1) "3"
127.0.0.1:6370> hgetall 3
1) "FirstName"
2) "Bob"
3) "LastName"
4) "Marley"

移除元素

eval "local k2=redis.call('hget',KEYS[1],KEYS[2]) local k3=redis.call('hget',KEYS[1],KEYS[3]) redis.call('srem',KEYS[2]..':'..k2,KEYS[1]) redis.call('srem',KEYS[3]..':'..k3,KEYS[1]) redis.call('del',KEYS[1])" 3 3 FirstName LastName

127.0.0.1:6370> hgetall 3
(empty list or set)
127.0.0.1:6370> smembers LstName:Marley
(empty list or set)

关于indexing - 原子添加/删除索引(集合)值到 Redis 中的哈希属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50949133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com