假设我有一些我想要存储在Redis中的数据:
* UUID
* State (e.g. PROCESSED, WAITING_FOR_RESPONSE)
* […] other vals
UUID
或State
是我需要查询的唯一两个变量
答案 0 :(得分:2)
好吧,不确定我完全理解,但试着去尝试。
假设您需要查找状态为PROCESSED
的所有实体,您可以使用这些设置:
SADD PROCESSED 123-abcd-4567-0000
然后,您可以轻松找到PROCESSED
状态的所有实体。你会为你想要的每个州做同样的事情。
SMEMBERS PROCESSED
现在,您还希望为所有实体及其值设置哈希值:
HSET 123-abcd-4567-0000 state PROCESSED
HSET 123-abcd-4567-0000 otherproperty valuedata
这将设置"状态"在要处理的UUID的哈希值中(您需要弄清楚如何保持这些UUID同步,您可以使用脚本或只是处理您的代码)
总而言之,你有两个主要结构:
示例哈希
123-abcd-4567-0000 => { state: PROCESSED, active: true }
987-zxy-1234-0000 => { state: PROCESSED, active: false }
但如果这似乎不合适,请澄清一下。
如果你想减少你的密钥空间,因为每个实体的哈希可以很多,你可以改为为每个属性创建一个哈希:
HSET states 123-abcd-4567-0000 PROCESSED
因此,每个属性都有一个哈希,你的密钥是UUID,value是属性的值,它是哈希密钥。
示例哈希
state => { 123-abcd-4567-0000: PROCESSED, 987-zxy-1234-0000: PROCESSED }
active => { 123-abcd-4567-0000: true, 987-zxy-1234-0000: false }
答案 1 :(得分:0)
RediSearch (a Redis module) 支持向 Redis 中的现有数据添加二级索引,如 Hash。
为要索引的字段设置架构后,您可以根据这些字段值轻松搜索。
例如
127.0.0.1:6379> FT.CREATE myIdx ON HASH PREFIX 1 doc: SCHEMA title TEXT
127.0.0.1:6379> hset doc:1 title "mytitle" body "lorem ipsum" url "http://redis.io"
(integer) 3
127.0.0.1:6379> FT.SEARCH myIdx "@title:mytitle" LIMIT 0 10
1) (integer) 1
2) "doc:1"
3) 1) "title"
2) "mytitle"
3) "body"
4) "lorem ipsum"
5) "url"
6) "http://redis.io"