0

私は 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を一致させてキャッシュを削除したい:

私のボードショーの 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メソッドはサポートされていません。

正規表現に基づいて削除する方法があるはずです。助けてください。

どうもありがとう!!

4

2 に答える 2

0

私の知る限り、memcached の問題は、すべてのキーを取得する簡単な方法がないことです。そのため、正規表現に基づく期限切れなどの機能はありません。

あなたができること:

キャッシュ キーの命名規則を使用し、知っているすべてのキャッシュ キー (作成された可能性がある) を単純に期限切れにします。

これにより、作成されていないキーが期限切れになるため、オーバーヘッドが少し発生します。

全体として、アクション キャッシュの使用はお勧めしません。それらがrails4から除外されたのには十分な理由があります。

于 2013-03-04T10:11:54.993 に答える