【问题标题】:How to store array of hashes in redis如何在redis中存储哈希数组
【发布时间】:2011-06-08 11:56:12
【问题描述】:

我想在 redis 中存储哈希数组,最好的编码方法是什么?

【问题讨论】:

    标签: node.js redis key-value-store


    【解决方案1】:

    AFAIK 的唯一方法是取消引用它们。假设您有一个包含 2 个哈希的数组,例如:{foo: 'bar', baz: 'qux'}

    您可以单独存储它们,然后创建一个引用它们的 SET:

    HMSET myarr:0 foo bar baz qux
    SADD myarr myarr:0
    HMSET myarr:1 foo bar baz qux
    SADD myarr myarr:1
    

    然后您可以通过查询集合来检索它们:SMEMBERS myarr,然后在所有返回的键上调用 HGETALL <key> 以重建您的原始哈希数组。

    我希望这是有道理的。如果你找到更聪明的方法,我很乐意听到。

    【讨论】:

      【解决方案2】:

      如果您使用的语言支持到/从 json 转换,您可以将哈希转换为 json 并将其附加到列表中。您可以在 Ruby 中执行以下操作:

      require 'rubygems'
      require 'redis'
      require 'json'
      require 'pp'
      
      redis = Redis.new(:host => '127.0.0.1', :port => 6379)
      
      h1 = { :k1 => 'v1', :k2 => 'v2' }
      redis.rpush('arr', h1.to_json)
      
      h2 = { :k3 => 'v3', :k4 => 'v4' }
      redis.rpush('arr', h2.to_json)
      
      hashes = redis.lrange('arr', 0, -1)
      hashes.map! { |x| JSON.parse(x) }
      pp hashes
      

      【讨论】:

      • 就是这样!
      • 这有原子性问题...如果有人更新哈希中的字段等。
      • 如果您需要删除或编辑哈希,这会使逻辑更加复杂......
      猜你喜欢
      • 1970-01-01
      • 2015-08-14
      • 2012-10-01
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多