ruby-on-rails-3 - pattern - redis search key
Guardando un HASH para Redis en una aplicaciĆ³n de rieles (4)
Estoy empezando con Redis con Rails, así que esta puede ser una pregunta tonta.
Estoy intentando guardar un hash en el servidor redis, pero cuando lo recupero es solo una cadena de IE.
hash = {"field" => "value", "field2" => "value2"}
$redis.set(''data'', hash)
#So collecting the data
@data = $redis.get(''data'')
Esto obviamente es incorrecto ya que vuelve como una cadena.
También he intentado en bucle algunos resultados y utilizando el hset es decir.
@data.each do |d|
$redis.hset(''data'', d.field, d.value)
end
# errror
# ERR Operation against a key holding the wrong kind of value
No estoy seguro de a dónde ir. He borrado la clave $ redis.del (''data'') para asegurarme de que no haya sido el problema.
Espero que puedas aconsejar, Lee
Cuando usa $redis.set(''data'', hash)
, en realidad está guardando una cadena Redis normal, aunque use una variable de hash (puede estar serializada en la cadena Json, pero realmente no estoy seguro).
Intente usar $redis.hset(''data'', hash)
(no haciendo un bucle a través de los campos como lo hizo).
Otro punto: ¿Está seguro de haber eliminado la clave anterior por completo? ¿ hset
una clave completamente diferente para eliminar la opción de que la clave de cadena anterior todavía esté "ahí fuera"?
Debería haber leído los documentos de redis más a fondo.
Responder:
IN
$redis.set ''data'', hash.to_json
OUT
data = JSON.parse($redis.get("data"))
La gema redis remapea tu hash de esta manera:
$redis.mapped_hmset "test", { foo: "bar" }
$redis.hgetall "test" => {"foo"=>"bar"}
Para guardar un hash en redis. Debe pasar la clave como primer parámetro y luego los siguientes parámetros deben ser las claves y los valores en el método hmset
.
$redis.hmset(''user:007'', :name, ''Antonio'', :busy, ''maybe'', :ping, ''pong'')
Feliz codificacion