Im just starting off with Redis with Rails so this maybe a dumb question.
I am trying to save a hash to redis server but when I retrieve it its just a string IE.
hash = {"field" => "value", "field2" => "value2"}
$redis.set('data', hash)
#So collecting the data
@data = $redis.get('data')
This is obviously wrong as its returning as a string.
I have also tried looping some results and using the hset ie.
@data.each do |d|
$redis.hset('data', d.field, d.value)
end
# errror
# ERR Operation against a key holding the wrong kind of value
Not sure where to go. I have deleted the key $redis.del('data') to make sure that was not the issue.
Hope you can advise, Lee
The redis gem will remap your hash like this:
When you use
$redis.set('data', hash)
you actually saving a regular Redis string, even though you use an hash variable (it might be serialized to Json string, but I'm really not sure about it).Try using
$redis.hset('data', hash)
(not by looping through the fields as you did).Another point: Are you sure you've deleted the previous key entirely? Did you try to
hset
a completely different key to eliminate the option the previous string key is still "out there"?I should have read the redis docs more thorough.
Answer:
In order to save a hash in redis. You must pass the key as a first parameter and then the next parameters must be the keys and values on
hmset
method.Happy Coding.