Вы не можете сохранить все параметры хэша Ruby в хэше Redis и ожидать получения атрибутов аналогичным образом.Прежде чем сохранить его в хэше redis, ruby вызывает to_s
для атрибутов.
redis.hmset('foo', 'a', 'b', 'account', 1, 'date', Time.now)
redis.hgetall('foo')
# => {"a"=>"b", "account"=>"1", "date"=>"2018-12-12 13:45:50 +0530"}
Как вы можете видеть выше, '1' преобразуется в строку, а Time.now - из Time
* объект * (2018-12-12 13:45:42 +0530
) в строку "2018-12-12 13:45:50 +0530"
Вместо этого можно использовать Маршаловый дамп и установить хэш рубинакак ключ redis:
hash = {'a' => 'b', 'account' => 1, 'date' => Time.now }
# => {"a"=>"b", "account"=>1, "date"=>2018-12-12 13:47:25 +0530}
redis.set('foo', Marshal.dump(hash))
redis.get('foo')
# => "\u0004\b{\bI\"\u0006a\u0006:\u0006ETI\"\u0006b\u0006;\u0000TI\"\faccount\u0006;\u0000Ti\u0006I\"\tdate\u0006;\u0000TIu:\tTime\r\x88\xAD\u001D\x80-\xB8\x9CE\a:\voffseti\u0002XM:\tzoneI\"\bIST\u0006;\u0000F"
Marshal.load redis.get('foo')
#=> {"a"=>"b", "account"=>1, "date"=>2018-12-12 13:47:25 +0530}