Как сохранить массив хэшей в redis

#node.js #redis #key-value-store

#node.js #redis #ключ-значение-хранилище

Вопрос:

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

Ответ №1:

Единственный способ 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
  

Затем вы можете извлечь их все, запросив set: SMEMBERS myarr а затем вызвать HGETALL <key> все возвращенные ключи, чтобы восстановить исходный массив хэшей.

Я надеюсь, что это имеет смысл. И если вы найдете более разумный способ, я был бы рад его услышать.

Комментарии:

1. Не могли бы вы, пожалуйста, объяснить сложность? O(?)

Ответ №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
  

Комментарии:

1. Вот как это сделать!

2. Это связано с проблемами атомарности … если кто-то обновляет поле в хэше и т.д.

3. это усложняет логику, если вам нужно удалить или отредактировать хэш…

4. Это также очень медленно 😓