使用redis-rb,如何将哈希值推送到列表中?我是否必须对JSON进行编码或者本机支持?如果是这样,我该怎么办?我只看到带有键和键/值对的hset方法。
由于
答案 0 :(得分:18)
将任何对象(不仅仅是哈希)存储为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
答案 1 :(得分:10)
Redis列表类似于Ruby Array。它没有钥匙。
如redis-rb documentation中所述,如果要将Ruby对象存储在Redis值中,则需要首先使用例如序列化它。 JSON:
存储对象
Redis仅将字符串存储为值。如果要将对象存储在键中,可以使用像JSON这样的序列化/解除分离机制:
>> redis.set "foo", [1, 2, 3].to_json => OK >> JSON.parse(redis.get("foo")) => [1, 2, 3]
如您所述,您可以使用其他选项将其存储为Redis哈希值。 HMSET,但如果您的唯一目标是存储和检索对象(而不是对其执行Redis操作),则这是多余的。