在Redis中搜索JSON值

时间:2018-08-24 09:38:55

标签: node.js database redis node-redis

我正在开发一个使用redis作为数据库的nodeJS服务器,我需要检索所有具有特定service_id值的redis密钥。例如,如果服务ID为4,则需要检索其中service_id = 4的所有键。 我在redis中具有以下结构,其中值是JSON:

key: "{service_id: number}"

是否可以过滤具有特定服务ID的密钥?也许有一些解决方法使之成为可能?

2 个答案:

答案 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很棒!