2009-08-03 15 views
3

I-Cache müssen (und verfallen) alle Modelle in einer Tabelle.Cache alle Modelle in einer Tabelle

Zum Beispiel, wenn ich ein Modell namens Währung haben, ich habe nur weniger als 10 mögliche Währungen. Deshalb wäre es schön zu haben:

class Currency < ActiveRecord::Base 
    cache_all(:expire_in => 10.minutes) 
end 

so dass

Currency.all 
Currency.find_by_name("USD") 

nicht die DB treffen sollte.

Was denken Sie, es ist ein guter Ansatz sein könnte?

Auch, wenn Sie glauben, dass es besser wäre, ein Modell zu verwenden, die von einer DB gesichert ist nicht, bitte Kommentar zu diesem Thema. Bitte beachten Sie, dass ich gerne eine AR-artige Verbindung hätte.

Antwort

7

Da die Datenmenge so klein ist, wahrscheinlich das Beste, was es in einem lokalen Speicher zwischengespeichert werden. Es gibt mehrere Möglichkeiten, dies zu tun, eine ist die Verwendung Memoization like I show here. Dies ist jedoch nicht die effizienteste Methode, da die Methoden all und find_by_name in separaten Caches gespeichert werden, obwohl sie das gleiche Objekt sind.

Eine Alternative ist das Verfahren neu zu definieren, um die Objekte manuell cachen. Etwas wie das.

Möglicherweise gibt es ein Plugin, um dies für Sie zu handhaben, aber ich habe mich überhaupt nicht damit befasst.

+0

Danke, Ryan :). Ich habe auch das Cached_Model Juwel gefunden, aber es scheint ein wenig alt .. ich werde es versuchen. –

+0

Eine Sache zu beachten ist, dass wenn Sie mehrere Server ausführen, wenn die Daten sich ändern, müssen Sie den In-Memory-Cache auf allen Servern löschen, nicht nur die, die die Daten geändert hat. –

Verwandte Themen