如何在redis中存储哈希数组

时间:2011-06-08 11:56:13

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

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

2 个答案:

答案 0 :(得分:30)

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>来重建原始的哈希数组。

我希望这是有道理的。如果你找到一种更聪明的方式,我会很高兴听到它。

答案 1 :(得分: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