Как преобразовать хеш внутри строки в хеш? - PullRequest
0 голосов
/ 12 декабря 2018

Как я могу преобразовать данные, полученные из данных redis, которые были сохранены в виде хэша в строковом формате, обратно в хэш?

Попытка извлечения из redis как строки, не способной преобразовать в хэш

Строкавыглядит так:

{"index"=>1, "isActive"=>true, "accountNumber"=>5137, "name"=>{"first"=>"Holder", "last"=>"Hanson"},}

1 Ответ

0 голосов
/ 12 декабря 2018

Вы не можете сохранить все параметры хэша 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...