【问题标题】:Storing complex data in redis在redis中存储复杂数据
【发布时间】:2015-09-11 14:13:00
【问题描述】:

我最近开始使用 redis(使用 ruby​​ on rails),我想知道存储此类数据的最佳方式是什么。

data1 = {
  'name2' : {
     'age' : xxx,
     'height' : xxx,
   },
  'name2' : {
    'age' : xxx,
    'weight' : xxx,
   }
}

data2 = {
  'class1' : {
     'num' : xxx,
     'location' : xxx,
     'teacher' : xxx,
  },
  'class2' : {
    'num' : xxx,
    'location' : xxx,
    'teacher' : xxx,
  }
}

我曾尝试使用哈希映射(hset、hmset、hget、hmget)命令,但它们似乎不适用于“年龄”和“身高”等子键。

【问题讨论】:

    标签: ruby-on-rails redis


    【解决方案1】:

    您似乎正试图在 Redis 中存储一些 JSON。使用redis-rb gem 做这件事很简单。例如,您可以执行以下操作:

    redis = Redis.new
    redis.set("key", data1)
    

    那么当你想检索这些数据时,我会做这样的事情:

    data = JSON.parse(redis.get("key"))
    

    这将使用名为“key”的键检索您存储在 Redis 中的 JSON 对象,然后将其解析为 Ruby 哈希。我希望这会有所帮助!

    【讨论】:

    • 或者,您可以分解 JSON 对象并使用 Hash 命令,就像 OP 直观地尝试的那样。这样做的好处是能够独立访问每个字段以进行读取和/或写入,但如果需要作为一个整体,则需要从不同的键和字段重新组装完整的 JSON 对象。
    【解决方案2】:

    在 Redis 哈希中,您不能直接存储嵌套元素,这就是您收到这些错误的原因。
    如果您希望能够直接访问 data1.name1 或 data2.class2 之类的项目,那么使用哈希是正确的选择。要存储它们,您可以将 data1.name1 中的所有内容作为 json 放入:

    HSET data1 name1 {'num' : xxx,'location' : xxx,'teacher' : xxx,}
    

    并加载数据:

    HGET data1 name1 
    

    但是,如果您不想直接加载这些字段,并且可以加载 data1 或 data2 中的所有内容,那么 vaughanj 的答案就是您需要的。

    【讨论】:

      猜你喜欢
      • 2014-03-26
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2017-05-08
      • 2020-02-24
      • 1970-01-01
      相关资源
      最近更新 更多