#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. Это также очень медленно
![]()