如何将以字符串格式存储为哈希的redis数据接收的数据转换回hash?
尝试从redis检索为无法转换为哈希的字符串
字符串如下:
config/app.php
答案 0 :(得分:1)
您无法将所有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
* object * (2018-12-12 13:45:42 +0530
)转换为字符串"2018-12-12 13:45:50 +0530"
您可以改为使用Marshal dump并将ruby哈希设置为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}