我的网站有一个顶部导航菜单栏,它不经常更改内容,因此它是片段缓存的理想选择。但是,如果用户已登录,则菜单栏的一部分将包含用户的名称,因此是个性化的,无法缓存。
我可以:
片段缓存静态部分并分别提供个性化部分。这似乎很容易。
缓存该批次,可能在memcached或CloudFront中,在会话中保留用户名,并使用JavaScript从会话中提取用户名并在客户端对页面进行个性化。
最佳选择是什么?优选地基于类似情况的个人经验。
答案 0 :(得分:0)
试试这个:
##in user.rb to cache user
after_save :invalidate_cache
def self.serialize_from_session(key, salt)
single_key = key.is_a?(Array) ? key.first : key
Rails.cache.fetch("user:#{single_key}") do
User.where(:id => single_key).entries.first
end
end
def invalidate_cache
Rails.cache.delete("user:#{id}")
end
信用:Rails Devise: How do I (mem)cache devise's database requests for the user object?