如何在Redis中存储哈希数组

19

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

2个回答

39

据我所知,唯一的方法是取消引用它们。假设您有一个由两个哈希组成的数组,如:{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>以重建原始哈希数组。

我希望这样讲清楚了。如果您发现更聪明的方法,我很乐意听取。


请问您能解释一下复杂度吗?O(?) - EvgenyKolyakov

4

如果你使用一种支持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

这就是正确的做法! - radtek
2
这会有原子性问题...如果有人更新哈希表中的字段等。 - RandallB
1
如果您需要删除或编辑哈希表,则会使逻辑更加复杂... - MoxGeek
这也非常慢。 - EvgenyKolyakov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接