[英]Rails Caching Strategy for Index action
在我的用戶索引操作中,我正在運行查詢,該查詢查找與current_user
和異性屬於同一城市的所有用戶,並按DESC
順序按profile_update_at
對結果進行排序。 查詢工作得很好。 該應用目前正在3個城市運行。 因此,來自A市的每個男性基本上都在運行相同的查詢,同樣來自A市的女性。
我希望能夠將此查詢緩存大約5分鍾。 我怎樣才能做到這一點? 我應該使用什么類型的緩存? 由於查詢取決於current_user
的城市和性別,因此從城市A為用戶創建的緩存是否會干擾來自城市B的用戶查詢? 或者將從City B為用戶創建新緩存。
您可以使用Rails.cache( http://guides.rubyonrails.org/caching_with_rails.html#cache-stores )。 城市和性別的每個組合都是緩存的唯一關鍵。 所以在索引操作中你會有類似的東西:控制器代碼:
def index
@users = User.same_city_opp_gender_as(current_user)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
end
end
型號代碼:
def self.same_city_opp_gender_as(user)
Rails.cache.fetch("users/#{user.city}/#{user.gender}"){ User.where(city: user.city).where(gender: user.gender).order(:updated_at) }
end
用戶類還必須提供城市和性別方法。 對於3個城市(A,B,C)和2個性別(M,F),您將獲得6個具有以下鍵的緩存:
因此,每次調用same_city_opp_gender_as都會在未命中時生成新緩存,或者在緩存存在時獲取值。 考慮緩存到期並閱讀https://devcenter.heroku.com/articles/building-a-rails-3-application-with-memcache
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.