2013-03-04 30 views
0

Iam正在使用Rails應用程序,並使用Dalli將緩存與memcache集成。 Iam正在使用清掃器來處理動作緩存和到期緩存。 我掃地機的代碼如下所示:Rails在Memcache中使用regex表達式使行爲過期

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,並刪除緩存就像:

如果我的板顯示的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方法。

Iam肯定應該有一些方法來刪除基於正則表達式。請幫忙。

很多感謝!

回答

0

afaik memcached的問題在於沒有簡單的方法來檢索所有密鑰。這就是爲什麼沒有像正則表達式那樣過期的功能。

你可以做什麼:

使用的命名慣例爲您的緩存鍵,簡單地到期,可能已經創建,你知道的所有緩存鍵。

這會通過過期的密鑰造成一點開銷,這些密鑰尚未創建。

總的來說,我不會建議你使用動作緩存。那些被排除在rails4之外的理由很充分。

0

你可以嘗試Gibson緩存服務器作爲主緩存存儲,它支持多個密鑰無效在O(1)時間前綴由於其內部數據結構,在你的情況下,它會像下面這樣:

Rails.cache.delete_matched "boards/1/" 

ActiveSupport擴展正在開發中,將在一週內發佈。

相關問題