Ruby on rails 如何在不知道确切密钥的情况下删除Rails中的一组缓存项?

Ruby on rails 如何在不知道确切密钥的情况下删除Rails中的一组缓存项?,ruby-on-rails,caching,Ruby On Rails,Caching,我有以下问题: 我有一个产品的索引控制器,索引控制器可以有无限的查询字符串组合,即 /products?category=5&color=6 现在,通过使用参数作为键,可以很容易地存储所有这些参数: caches_action :index, :cache_path => Proc.new { |c| c.params } 当您需要在添加、删除或更改产品时清除所有索引缓存时,就会出现问题。据我所知,您需要知道使缓存对象过期的密钥。在清扫器中不能执行以下操作: def after

我有以下问题:

我有一个产品的索引控制器,索引控制器可以有无限的查询字符串组合,即

/products?category=5&color=6
现在,通过使用参数作为键,可以很容易地存储所有这些参数:

caches_action :index, :cache_path => Proc.new { |c| c.params }
当您需要在添加、删除或更改产品时清除所有索引缓存时,就会出现问题。据我所知,您需要知道使缓存对象过期的密钥。在清扫器中不能执行以下操作:

def after_update(product)
   expire_action(product, :all)
end
我已经研究了一些缓存标记,但无法让我所看到的宝石做我需要的,或者实际上让它们工作。我看到的宝石是和。我试着和收银员一起做了以下工作:

caches_action :index, :cache_path => Proc.new { |c| c.params }, :tag => "products"
并在清扫器文件中使用:

Cashier.expire "products"
但是,当使用“出纳”尝试任何操作时,会出现以下错误:

uninitialized class variable @@adapter in Cashier
使用rails缓存标记,我已尝试执行以下操作:

caches_action :index, :cache_path => Proc.new { |c| c.params }, :tags => %w(products)
然后在清扫器文件中使用以下命令:

cache.delete_tag "products"
但这不起作用-它没有清除缓存。做我想做的事情的正确方法是什么?

您可以调用它,它可以将
Regexp
作为参数:

将删除任何匹配的片段,因此
%r{pages/\d*/notes}
可能会删除所有注释


谢谢,但这对Memcache不起作用。“注意:Regexp expiration仅在可以对所有键进行迭代的缓存上受支持(与memcached不同)。”我想解决这一问题的一个办法是使用Redis,但我正在寻找一个理想的解决方案,它与任何形式的缓存兼容。