簡體   English   中英

用於索引操作的Rails緩存策略

[英]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個具有以下鍵的緩存:

  • “用戶/ A / M”
  • “用戶/ A / F”
  • “用戶/ B / M”
  • “用戶/ B / F”
  • “用戶/ C / M”
  • “用戶/ C / F”

因此,每次調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM