什么是redis命令来搜索具有特定字段值的条目?

kmbjn2e3  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(659)

在redis我有一个分支(cache:id)以及其中的多个散列(例如一些键: cache:123457 , cache:563457 ).
条目包含字段: id -又名主键,和 sign -只是个标签。
我想在我的redis中搜索并找到所有包含该字段的条目 sign 等于 a . 表演不是问题。我只需要确认这些条目是否存在。我知道我需要以某种方式遍历所有条目,但找不到正确的命令。我查过了 KEYS (密钥缓存:*-但下一步是什么?), SCAN 但他们运气不好。在sql中,我将执行以下操作: select * from cache where sing='a' . 所以我不想扫描键,我想扫描所有条目的字段。
我要怎么做?有什么建议吗?

pw136qt2

pw136qt21#

redis不像 RDBMs 如果你想问 select * from cache where sing='a' ,您可以创建二级索引。
当你创建一个新的 hash ,也可以添加到 set 命名者 hash value . 我将使用 sign 前缀。

127.0.0.1:6379> HSET firsthash id 1 sign a
(integer) 2
127.0.0.1:6379> SADD sign:a firsthash
(integer) 1
127.0.0.1:6379> HSET secondhash id 2 sign b
(integer) 2
127.0.0.1:6379> SADD sign:b secondhash
(integer) 1
127.0.0.1:6379> HSET thirdhash id 3 sign a
(integer) 2
127.0.0.1:6379> SADD sign:a thirdhash
(integer) 1
127.0.0.1:6379> HSET fourthhash id 4 sign aa
(integer) 2
127.0.0.1:6379> SADD sign:aa fourthhash
(integer) 1
127.0.0.1:6379> SMEMBERS sign:a
1) "thirdhash"
2) "firsthash"

当你删除散列-也从集合中删除。

127.0.0.1:6379> DEL firsthash
(integer) 1
127.0.0.1:6379> SREM sign:a firsthash
(integer) 1
127.0.0.1:6379> SMEMBERS sign:a
1) "thirdhash"

当您需要更新散列字段的值时,首先从集合中删除,然后添加到新的集合中

127.0.0.1:6379> SREM sign:a thirdhash
(integer) 1
127.0.0.1:6379> HSET thirdhash sign newa
(integer) 0
127.0.0.1:6379> HGETALL thirdhash
1) "id"
2) "3"
3) "sign"
4) "newa"
127.0.0.1:6379> SADD sign:newa thirdhash
(integer) 1
127.0.0.1:6379> SMEMBERS sign:newa
1) "thirdhash"

相关问题