2011-09-20 46 views
3

我有一個頁面,其中index操作顯示了帖子列表,包括自定義排序列,分頁等。雖然我可以緩存每個單獨的頁面/排序選項Rails 3.1查詢字符串操作的通配符過期緩存

cache(:direction => params[:direction], :sort => params[:sort], :page => params[:page]) do 

我不能過期所有這些在一次使用到expire_action單個呼叫(這是一個問題)。我知道expire_action有一個正則表達式選項,但這很混亂(使用正則表達式來搜索使用散列創建的鍵),並且我使用的memcached不起作用。

如何通過一次性調用expire_action來終止一個動作的所有緩存成員?如果這是不可能的,是否還有其他緩存選項可以推薦?

+0

這與Sweepers沒有任何關係。我想知道如何使屬於某個操作的所有緩存過期,而不管其他緩存密鑰。 –

回答

1

我會建議通過this post on caching in Rails來查找,這是一個非常徹底的帖子,通過各種策略可能會提供你在這種情況下尋找的結果。

雖然他在文章中沒有提到它,但在參數列表中添加某種緩存清除參數(如緩存版本ID)可能會爲您提供一種以更通用的方式使緩存過期的方法。例如:

cache(:version => Posts.cache_version, :direction => params[:direction], :sort => params[:sort], :page => params[:page]) do 

# Later on to bust the cache 
Posts.cache_version = 2 

,你會如何想實現cache_versioncache_version=可能取決於你如何處理應用程序中的其他數據變化的細節。也許還會有一個比這更優雅的解決方案,但這是想到的。