Redis-rb将哈希推入列表

时间:2012-01-12 09:04:29

标签: ruby redis

使用redis-rb,如何将哈希值推送到列表中?我是否必须对JSON进行编码或者本机支持?如果是这样,我该怎么办?我只看到带有键和键/值对的hset方法。

由于

2 个答案:

答案 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操作),则这是多余的。