Подтвердить что ты не робот

Сохранение HASH для Redis в приложении rails

Я только начинаю с Redis с Rails, так что это может быть немой вопрос.

Я пытаюсь сохранить хэш для сервера redis, но когда я получаю его как строку IE.

hash = {"field" => "value", "field2" => "value2"}
$redis.set('data', hash)

#So collecting the data
@data = $redis.get('data')

Это, очевидно, неверно, поскольку он возвращается как строка.

Я также попытался зациклировать некоторые результаты и использовать hset, т.е.

@data.each do |d|
  $redis.hset('data', d.field, d.value)
end

# errror
# ERR Operation against a key holding the wrong kind of value

Не уверен, куда идти. Я удалил ключ $redis.del('data'), чтобы убедиться, что это не проблема.

Надеюсь, что вы можете посоветовать, Ли

4b9b3361

Ответ 1

Я должен был прочитать документы redis более подробно.

Ответ:

IN
$redis.set 'data', hash.to_json

OUT
data = JSON.parse($redis.get("data"))

Ответ 2

Жемчуг redis переделает ваш хеш следующим образом:

$redis.mapped_hmset "test", { foo: "bar" }
$redis.hgetall "test" => {"foo"=>"bar"}

Ответ 3

Чтобы сохранить хэш в redis. Вы должны передать ключ в качестве первого параметра, а затем следующими параметрами должны быть ключи и значения по методу hmset.

$redis.hmset('user:007', :name, 'Antonio', :busy, 'maybe', :ping, 'pong')

Счастливое кодирование.

Ответ 4

Когда вы используете $redis.set('data', hash), вы фактически сохраняете регулярную строку Redis, хотя вы используете переменную хэша (она может быть сериализована для строки Json, но я действительно не уверен в этом).

Попробуйте использовать $redis.hset('data', hash) (не путем прокрутки полей, как вы это делали).

Еще один момент: вы уверены, что полностью удалили предыдущий ключ? Вы пытались выполнить hset совершенно другой ключ, чтобы исключить опцию, когда предыдущий строковый ключ все еще "там"?