Ответ 1
Я должен был прочитать документы redis более подробно.
Ответ:
IN
$redis.set 'data', hash.to_json
OUT
data = JSON.parse($redis.get("data"))
Я только начинаю с 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'), чтобы убедиться, что это не проблема.
Надеюсь, что вы можете посоветовать, Ли
Я должен был прочитать документы redis более подробно.
Ответ:
IN
$redis.set 'data', hash.to_json
OUT
data = JSON.parse($redis.get("data"))
Жемчуг redis переделает ваш хеш следующим образом:
$redis.mapped_hmset "test", { foo: "bar" }
$redis.hgetall "test" => {"foo"=>"bar"}
Чтобы сохранить хэш в redis. Вы должны передать ключ в качестве первого параметра, а затем следующими параметрами должны быть ключи и значения по методу hmset
.
$redis.hmset('user:007', :name, 'Antonio', :busy, 'maybe', :ping, 'pong')
Счастливое кодирование.
Когда вы используете $redis.set('data', hash)
, вы фактически сохраняете регулярную строку Redis, хотя вы используете переменную хэша (она может быть сериализована для строки Json, но я действительно не уверен в этом).
Попробуйте использовать $redis.hset('data', hash)
(не путем прокрутки полей, как вы это делали).
Еще один момент: вы уверены, что полностью удалили предыдущий ключ? Вы пытались выполнить hset
совершенно другой ключ, чтобы исключить опцию, когда предыдущий строковый ключ все еще "там"?