我是一名试图为我的应用实施缓存的Rails新手。 我安装了Memcached和我development.rb其配置如下:Rails针对用户特定记录的动作缓存
config.action_controller.perform_caching = true
config.cache_store = :mem_cache_store
我有一个控制器的ProductsController,显示用户的特定产品,当他们在登录
class ProductsController < ApplicationController
caches_action :index, :layout => false
before_filter :require_user
def index
@user.products
end
end
The route for index action is: /products
的问题是,当我以
登录:1)用户A第一次使用轨道撞击我的控制器并缓存产品动作。
2)我注销并登录为用户B,它仍然会记录我作为用户A和显示产品,为用户A和用户无法B. 它甚至不打我的控制器。
关键可能是路由,在我的memcached控制台中,我发现它是基于相同的密钥提取的。
20 get views/localhost:3000/products
20 sending key views/localhost:3000/products
行动缓存不是我应该使用的吗?我将如何缓存和显示用户特定的产品?
感谢您的帮助。
感谢潘。我最后提出了使用查询缓存的建议。任何有关如何在列表中的某个产品的某个属性得到更新时不会完全使“products/{#user.id}”的整个缓存无效的想法... like product(10).price? – truthSeekr 2011-02-23 23:45:05
如果需要,可以缓存单个产品而不是全部缓存值,以便可以更好地控制哪些缓存值失效。尽管如此,这是一把双刃剑 - 您希望使缓存失效的程度越高,获得的越复杂,需要制作的单个缓存语句也越多。我建议简单地使整个产品列表缓存无效,这可能是最简单的做法。如果您从这种方法开始遇到性能问题,那么尝试进一步深入并创建更详细的缓存。不要过度优化。 – 2011-02-24 00:00:50
非常感谢您的帮助和建议。 – truthSeekr 2011-02-24 00:14:54