Как хранить массив хэшей в Redis - PullRequest
14 голосов
/ 08 июня 2011

Я хочу хранить массив хэшей в Redis, как лучше всего его кодировать?

Ответы [ 2 ]

30 голосов
/ 08 июня 2011

Единственный способ AFAIK - отменить ссылку на них.Допустим, у вас есть массив из 2 хешей, например: {foo: 'bar', baz: 'qux'}.

Вы должны хранить их отдельно, а затем создать набор, который ссылается на них все:

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 голосов
/ 26 марта 2013

Если вы используете язык, который поддерживает преобразование в / из 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
...