使用redis的列表数据结构或序列化的ruby哈希来存储数据

时间:2010-07-10 12:00:10

标签: ruby list redis

问候,

我想在redis数据库中存储一些数据,但不知道应该采用哪种方式。数据等同于包含变量namestreetnumber的地址。它们将作为密钥存放在较低的name下,不会有双重。

现在,我应该将其保存为列表还是应该使用JSON / Marshall序列化哈希(例如{:name => 'foo', :street => 'bar', :number => 'baz'})并简单地存储它?

此致

托拜厄斯

2 个答案:

答案 0 :(得分:1)

使用编码的json对象是个不错的主意。你可以看到一些例子 - 请查看how the models are saved

Redis哈希也很好,特别是如果你需要对哈希值进行原子操作。

答案 1 :(得分:1)

此外,您可以使用Nest之类的内容来帮助您干掉密钥:

addresses = Nest.new("Address", Redis.new)

this_address = addresses[1]
# => "Address:1"

this_address.hset(:name, "foo")
this_address.hset(:street, "bar")

this_address.hgetall
# => {"name" => "foo", "street" => "bar"}

如果你需要更高级的东西,那就是Ohm,它将Ruby类映射到Redis:

class Address < Ohm::Model
  attribute :name
  attribute :street
  attribute :number
end

# Create
Address.create(:name => "foo", :street => "bar")

# Find by ID
Address[1]

# Find all addresses with name "foo"
class Address < Ohm::Model
  attribute :name
  attribute :street
  attribute :number

  index :name
end

Address.find(:name => "foo")
# => Array-like with all the Address objects