2010-07-10 3 views
1

Salutations,Utilisation de la structure de données de liste ou un hachage rubis sérialisé de Redis pour stocker des données

Je veux stocker des données dans une base de Redis et je ne sais pas où je devrais aller. Les données sont équivalentes à quelque chose comme une adresse avec les variables name, street et number. Ils seront stockés sous la clé inférieure name, il n'y aura pas de doublets.

Maintenant, dois-je l'enregistrer sous forme de liste ou devrais-je sérialiser le hachage ({:name => 'foo', :street => 'bar', :number => 'baz'} par exemple) avec JSON/Marshall et le stocker simplement?

Cordialement

Tobias

+0

I appris sur les hachages redis (> = 1.3.10) et ils semblent être parfaits! – tbuehlmann

Répondre

1

L'utilisation d'un objet JSON est encodée une assez bonne idée. Vous pouvez voir quelques exemples dans Hurl - consultez how the models are saved.

Les hachages Redis sont également intéressants, surtout si vous avez besoin d'opérations atomiques sur des valeurs de hachage.

+0

Le lien est 404ing :( –

+0

Les hachages Redis étaient la voie à suivre, tout simplement parfait. – tbuehlmann

1

vous pouvez également utiliser quelque chose comme Nest pour vous aider à tarir vos clés:

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"} 

Si vous avez besoin quelque chose de plus avancé, il y a Ohm, qui associe des classes 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 
Questions connexes