【问题标题】:Search JSON values in redis在 redis 中搜索 JSON 值
【发布时间】:2019-01-30 18:24:30
【问题描述】:

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

key: "{service_id: number}"

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

【问题讨论】:

    标签: node.js database redis node-redis


    【解决方案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
    

    或者用 HMSET 让它更短

    HMSET services:1 id 1 name foo
    HMSET services:2 id 2 name buz
    

    总之 - Redis 很棒!

    【讨论】:

    • 是的,如果您只想使用 service_id 搜索 redis,这可能是一个很好的解决方法。
    • 您可以通过任何字段进行查询,只需创建适当的结构即可。就像在 MySQL 中创建索引一样,您可以使用要查询的键创建散列。是的,它可能需要两次旅行,但是使用内存数据库,您绝对可以负担得起。你甚至可以使用Pseudo Multi Key Queries,但这有点提前
    【解决方案2】:

    Redis 是键值存储,不能查询。您必须使用密钥来检索任何值。如果可能的话,试试弹性搜索之类的东西

    【讨论】:

    • 恕我直言,Elasticsearch 对于键和值之类的简单存储来说是一种过度杀伤力。也非常难以维护并且非常消耗资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2013-09-19
    • 2015-06-07
    相关资源
    最近更新 更多