将缓存添加到记忆对象



我已经记住了一个对象,并考虑向该变量添加缓存..如果速度很重要,这是必需的吗?

def user_details    
 @_user_details ||= user.profiles.includes(":asso_1,:asso_2,:asso_3")
end

添加缓存

def user_details    
  data = Rails.cache.fetch("#{user.updated_at.to_i}") do
  @_user_details ||= user.profiles.includes(":asso_1,:asso_2,:asso_3")
  end
  @_user_details = data
end

更改缓存密钥; 让它像这样: users_#{user.id} ;

然后,您需要在用户更新时删除此密钥。

此外,您的user_details方法应如下所示:

def user_details    
  @_user_details ||= Rails.cache.fetch("users_#{user.id}") do
    user.profiles.includes(":asso_1,:asso_2,:asso_3")
  end
  return @_user_details
end

(我不确定你为什么要把它放在@_user_details但我把它保留在你的例子中)

您的用户模型应如下所示:

class User < ApplicationRecord
  ...
  after_update { Rails.cache.delete(cache_key) }
  def cache_key
    "users_#{self.id}"
  end
  def details
    Rails.cache.fetch(cache_key) do
      self.profiles.includes(":asso_1,:asso_2,:asso_3")
    end
  end
end

最新更新