【发布时间】:2012-02-08 14:01:34
【问题描述】:
使用 redis-rb,我如何将哈希推送到列表中?我必须对其进行 JSON 编码还是本机支持?如果是这样,我该怎么做?我只看到带有键和键/值对的 hset 方法。
谢谢
【问题讨论】:
使用 redis-rb,我如何将哈希推送到列表中?我必须对其进行 JSON 编码还是本机支持?如果是这样,我该怎么做?我只看到带有键和键/值对的 hset 方法。
谢谢
【问题讨论】:
将任何对象(不仅仅是哈希)存储为 JSON 编码字符串是一种方法。
如果您的用例允许,您还可以在列表中存储哈希 ID 并使用 SORT GET 检索其他值。
例子:
r.hmset('person:1', 'name','adam','age','33')
r.hmset('person:2', 'name','eva','age','28')
r.lpush('occupants', 'person:1')
r.lpush('occupants', 'person:2')
r.sort('occupants', :get => ['*->name'])
从哈希中获取列表名称,其中 ID 存储在 occupants 列表中。您可以检索多个字段,但您只会得到数组。
更多信息请查看SORT command
【讨论】:
Redis 列表类似于 Ruby 数组。它没有钥匙。
正如redis-rb documentation 中所讨论的,如果您想将 Ruby 对象存储在 Redis 值中,您需要首先使用例如序列化它。 JSON:
存储对象
Redis 仅将字符串存储为值。如果你想在 key 中存储一个对象,你可以使用 JSON 之类的序列化/反序列化机制:
>> redis.set "foo", [1, 2, 3].to_json => OK >> JSON.parse(redis.get("foo")) => [1, 2, 3]
您的另一个选择是将其存储为 Redis 哈希,正如您所提到的,使用例如HMSET,但是如果您的唯一目标是存储和检索对象(而不是对其执行 Redis 操作),那是多余的。
【讨论】: