Indexing 在Redis中将索引(集合)值以原子方式添加/删除到哈希属性

Indexing 在Redis中将索引(集合)值以原子方式添加/删除到哈希属性,indexing,redis,set,stackexchange.redis,Indexing,Redis,Set,Stackexchange.redis,使用Stackexchange.redis,如何对哈希属性的索引进行建模,以便自动删除哈希索引值 例: 在上面的示例中,当使用值LastName:Smith添加新哈希时,我可以使用.StringAppend()将值添加到相应的索引(Set)中 如果我需要使用Key=2删除散列,我如何从索引(Set)Key=LastName:Smith中存储的值中自动删除2 我是否需要调整模型以适应更高效的索引,以便按属性查询哈希 对我的措辞进行任何调整,使其更加清晰,我们也将不胜感激 ~z~谢谢 更新我学到的知

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

例:

在上面的示例中,当使用值
LastName:Smith
添加新哈希时,我可以使用
.StringAppend()
将值添加到相应的索引(Set)中

如果我需要使用
Key=2
删除散列,我如何从索引(Set)
Key=LastName:Smith
中存储的值中自动删除
2

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

对我的措辞进行任何调整,使其更加清晰,我们也将不胜感激

~z~谢谢

更新我学到的知识:

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

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

添加元素 127.0.0.1:6370>smembers姓氏:Marley
1) “3”
127.0.0.1:6370>hgetall 3
1) “名字”
2) “鲍勃”
3) “姓氏”
4) “马利”

删除元素 127.0.0.1:6370>hgetall 3
(空列表或集合)
127.0.0.1:6370>成员名称:马利
(空列表或集合)


因此,对于删除,我将有一个LUA脚本,它按照GET on the Set(进入集合)的方式执行某些操作(使用LUA foo从集合值内部删除一个键-可能是字符串替换??),然后将集合添加回?添加示例脚本以删除到答案中。
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}
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
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