2015-10-27 34 views
5

parametrelerine dayanan değişken değişken önbellekleme Kullanıcı_adı tablosundaki çeşitli verileri depolarım ve bu verileri tanımladığım ilişkilendirmeyle birlikte iliştirdiğimde ve aslında bunu Ruby örneği Değişken önbelleğe alma özelliğini kullanarak önbelleğe alıyorum.Ruby on Rails örneği

def user_data(user_id) 
    @user_data || = User.find(user_id).data 
end 
nil ve o bir kullanıcı için veri tutacak bir kez 1'e eşit user_id için diyelim ve bu yöntemde user_id 2 geçirerek zaman veri döndürme var

ama örnek değişken @user_data tahsis edilecek değer sadece ilk kez user_id 1 için, ona yeni bir değer tahsis etmeyeceği için, sorum şu, fonksiyon parametrelerini temel alarak değerini nasıl önbelleğe alabilirim.

cevap

7

Caching with Rails guide'a bir göz atın. Raylar, tam sayfa önbelleğe almadan parça önbelleğe alma işlemine kadar verileri birden fazla düzeyde önbelleğe alabilir, bu sayfayı okumanızı şiddetle tavsiye ederim, böylece algılanan bir seçim yapabilirsiniz.

düşük seviyeli önbelleğe alma için bunu yapabilirsiniz: Varsayılan Raylar mağazalarında By

@user_data = Rails.cache.fetch("user_#{user_id}", expires_in: 1.hour) do 
    User.find(user_id).data 
end 

diskte önbellek, ancak memcache, hafıza deposu için kurulum yapabilirsiniz, vb

+0

Bu, Rails önbelleğe alma özelliğini kullanarak bunu nasıl uygulayacağınızdır. Bu, örnek değişken önbelleğe alma ile karıştırılmamalıdır, bununla ilgili soru. Desteklenen :-) – kaspernj

1

kullanabilirsiniz Anahtar tabanlı bir intance-variable-cache için bir karma. Bence istediğini yapar.

def user_data(user_id) 
    @user_data ||= {} 
    @user_data[user_id.to_i] || = User.find(user_id).data 
end