2009-05-09 9 views
14

giderek daha fazla zaman alıyor, biz MySQL geçirilen sorgular miktarını azaltmak için memcached kullanmaya başladık.Raylarda memcached kullanmak için en iyi yöntemler? Bizim app veritabanı transcations olarak

Sonuç olarak, iyi çalışıyor ve gerçekten çok zaman kazandırıyor.

Ama önbelleğe alma uygulamasını mı daha ver bir çözüm olarak "sessizce görünen" gibi, bizim pek çok yeni model şimdi böyle bir kod içerir: Bu dolum olarak daha bir ağrı oluyor

def self.all_cached 

    Rails.cache.fetch('object_name') { 

    find(

     :all, 
     :include => [associations]) 

    } 

end 

ve önbelleğin yıkanması, uygulamanın karşısında birkaç sınıfta gerçekleşir.

Şimdi, tüm gerekli modellerde daha güçlü ve kullanımı kolay hale getirmek için memcached mantığını soyutlamanın daha iyi bir yolu olup olmadığını merak ediyordum?

Tüm gerekli modüllere dahil edilmiş bir tür memcached modülüne sahip olmayı düşünüyordum.

Ama etrafta oynamadan önce, diye düşündüm: en

teşekkür

:-) ilk

Matt

uzmanlar soralım

cevap

13

Mevcut eklentileri kontrol etmenizi tavsiye ederim, iki büyük olanlar cache_fu ve cache money.

def parent < ActiveRecord::Base 
    has_many children 
end 

def child < ActiveRecord::Base 
    index :parent_id 
end 

#now you can do the following without ever hitting the DB 
parents = Parent.find :all 
parents.each{ |p| p.children } 

Önbellek Para ile gerçekten büyük bir kazançtır zaman şudur: Eğer önbellek dışına derneklerle modeli yüklemek istediğiniz kullanımı durumda ben şiddetle neredeyse otomatik olarak yapar Önbellek Para, denemenizi öneriyoruz Veri tabanı çoğaltma gecikmesi bir sorun haline geldiği noktaya kadar ölçeklendirin, önbellekleme yoluyla yazmak, kıçınızı kurtarır. Bu özellikle, çoğaltma gecikmesinin 500 hataya neden olabildiği ve genellikle istemediğiniz bir kabus olduğu Raylarda önemlidir.

5

Evet, bunu gerekli olan tüm modellere dahil bir memcached modülü olan bence en iyi çözüm. Düşünceleriniz mükemmel :)

+1

Teşekkürler, harika çalışıyor. – Matt

+3

birini tavsiye edebilir misiniz, yoksa sıfırdan bir tane yazıyor musunuz? bu cevap tamamlanmamış gözüküyor –

İlgili konular