【问题标题】:Redis get Key from ValueRedis 从 Value 中获取 Key
【发布时间】:2017-09-12 22:04:09
【问题描述】:

ID 是唯一的,我将其用作键,其余用作 Redis 数据库中的哈希值。我正在寻找一个查询,如果我给出一个特定的城市名称,它会返回我的 ID 列表。例如,如果我问,给我所有名为 SPRINGFIELD 的城市 ID,它应该返回 01103 和 01104。


{
  "_id": "01103",
  "city": "SPRINGFIELD",
  "loc": [
    -72.588735,
    42.1029
  ],
  "pop": 2323,
  "state": "MA"
}

{
  "_id": "01104",
  "city": "SPRINGFIELD",
  "loc": [
    -72.577769,
    42.128848
  ],
  "pop": 22115,
  "state": "MA"
}

{
  "_id": "01106",
  "city": "LONGMEADOW",
  "loc": [
    -72.5676,
    42.050658
  ],
  "pop": 15688,
  "state": "MA"
}

【问题讨论】:

  • 我的回答有帮助吗?如果是,请您接受,或者如果您仍然感到困惑,我可以提供更多深度

标签: redis key-value nosql


【解决方案1】:

你没有指定你在 Redis 中使用什么键来映射到一个城市的哈希结构,所以我假设你使用 ID,因为你说它是唯一的。

要查询与特定名称匹配的城市,您需要构建和维护支持查询的二级索引结构。一种方法是使用SET 数据结构并使用城市名称作为指向共享该城市名称的ID 集的键。

【讨论】:

    【解决方案2】:

    Redis 不支持开箱即用的数据查询。它基本上是一个简单的键值存储,其中的值是数据结构,如列表、哈希表等

    解决方法是创建一个单独的 ID 列表或哈希表并将其存储在 Redis 中。您需要维护所有要添加或删除的新 ID 的列表。

    如果查询是最重要的,那么它可能更适合您转向distributed cache,如NCache 或其他支持querying your data 的缓存产品。

    【讨论】:

      【解决方案3】:

      有一种方法可以实现这一点,即索引概念。索引可以帮助您实现这一目标

        ZADD myindex 25 Manuel
        ZADD myindex 18 Anna
        ZADD myindex 35 Jon
        ZADD myindex 67 Helen
      

      为了检索所有年龄在 20 到 40 之间的人,可以使用以下命令:

      ZRANGEBYSCORE myindex 20 40
      1) "Manuel"
      2) "Jon"
      

      如果您想了解更多信息,请使用此官方文档https://redis.io/topics/indexes

      【讨论】:

        【解决方案4】:

        这正是 RediSearch 的设计初衷。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-26
          • 2021-04-12
          • 1970-01-01
          • 2018-03-11
          • 2015-07-22
          • 1970-01-01
          • 2014-09-06
          • 2015-11-22
          相关资源
          最近更新 更多