2012-10-30 56 views
1

我有以下問題:如何在不知道確切鍵的情況下刪除Rails中的一組緩存項目?

我有一個產品指標控制器和索引控制器可以查詢字符串,即一個無盡的組合。現在

/products?category=5&color=6 

,它很容易使用PARAMS作爲關鍵,所有這些存儲:

caches_action :index, :cache_path => Proc.new { |c| c.params } 

問題是當你需要清除所有的索引緩存當一個產品被添加在,刪除或更改。據我所知,你需要知道過期緩存對象的關鍵。你不能這樣做在清掃如下:

def after_update(product) 
    expire_action(product, :all) 
end 

我看着到緩存中標註了一點,但不能讓我看着寶石做我所需要的,或者實際上讓他們工作在所有。他們看到的寶石是CashierRails-Cache-Tags。我想這樣做與出納如下:

caches_action :index, :cache_path => Proc.new { |c| c.params }, :tag => "products" 

,並在清掃文件使用:

Cashier.expire "products" 

但收銀員嘗試任何事情時,它提供了以下錯誤:

uninitialized class variable @@adapter in Cashier 

使用Rails -cache-tags我試着做以下事情:

caches_action :index, :cache_path => Proc.new { |c| c.params }, :tags => %w(products) 

,然後用下面的清掃文件:

cache.delete_tag "products" 

但沒有工作 - 它沒有清除緩存。做我正在做的事情的正確方法是什麼?

回答

0

您可以撥打expire_fragment,可以採取Regexp作爲參數:

Will remove any fragment that matches, so %r{pages/\d*/notes} might remove all notes.

+0

謝謝,但是這不會有Memcache的工作。 「注意:Regexp過期只支持可遍歷所有鍵的緩存(與memcached不同)。」我想這個解決方法是使用Redis,但我理想的是尋找一種與任何形式的緩存兼容的解決方案。 –

相關問題