我正在开发一个使用redis作为数据库的nodeJS服务器,我需要检索所有具有特定service_id值的redis密钥。例如,如果服务ID为4,则需要检索其中service_id = 4的所有键。 我在redis中具有以下结构,其中值是JSON:
key: "{service_id: number}"
是否可以过滤具有特定服务ID的密钥?也许有一些解决方法使之成为可能?
答案 0 :(得分:3)
Redis是键值存储,您无法查询它。您必须使用键来检索任何值。如果可能的话,尝试类似弹性搜索
答案 1 :(得分:1)
即使redis是key:value存储,也有很多方法可以调整它以使您受益。例如,您可以使用hashes并按以下方式存储您的值:
HSET services service:1 foo
HSET services service:2 bar
HSET services service:3 buz
因此语法为HSET hashname fieldname value
,其中,您使用冒号将ID分隔为字段。
如果每个键的值超过1,则可以执行以下操作:
HSET services service:1:name foo
HSET services service:1:id 1
HSET services service:2:name bar
HSET services service:2:id 2
因此,通过用另一个冒号分隔键,可以存储更多值。然后,如果您想从服务1中检索所有内容,则可以使用通配符执行SCAN,如下所示:
HSCAN services 0 match service:1:*
哎呀,您甚至可以将每个服务存储为单独的哈希:
HSET services:1 id 1
HSET services:1 name foo
HSET services:2 id 2
HSET services:2 name buz
总结- Redis很棒!