我正在使用Rails应用程序,并使用Dalli将缓存与memcache集成在一起。我正在使用清扫工作进行动作缓存和缓存。 我的清扫代码如下所示:
class BoardSweeper < ActionController::Caching::Sweeper
observe Board
def after_create(board)
expire_cache(board)
end
def expire_cache(board)
expire_action :controller => :boards, :action => :show, :id => "#{board.id}-#{board.title.parameterize}"
end
end
但我想使用正则表达式删除缓存,即我想匹配url并删除缓存,如:
如果我的电路板显示的网址是:
"boards/1/likes-collection-of-branded-products.text/javascript"
"boards/1/likes-collection-of-branded-products.text/html"
然后我想使用以下表达式使缓存失效:
Rails.cache.delete_matched(/boards\/1.*/)
但根据memcache api doc,它不支持 delete_matched 方法。
我确定应该有一些基于正则表达式删除的方法。请帮忙。
非常感谢!!
答案 0 :(得分:0)
afaik memcached的问题是没有简单的方法来检索所有密钥。这就是为什么没有基于正则表达式到期的功能。
你能做什么:
为缓存密钥使用命名约定,并简单地使您知道的所有缓存密钥到期,这些密钥可能已被创建。
这会通过使尚未创建的密钥到期而产生一些开销。
总的来说,我不会建议您使用动作缓存。那些被排除在rails4之外的原因很充分。
答案 1 :(得分:0)
您可以尝试使用Gibson缓存服务器作为主缓存存储,由于其内部数据结构,它在O(1)时间内支持多个密钥失效,在您的情况下,它只是一个问题:
Rails.cache.delete_matched "boards/1/"
正在开发ActiveSupport扩展程序,并将在大约一周内发布。