私はRails 3を使用しています。Ruby on Railsのインメモリキャッシュストアのキーを一覧表示するにはどうすればよいですか?
Ruby on Railsのメモリ内キャッシュストアのキーを一覧表示するにはどうすればよいですか?
私はRails 3を使用しています。Ruby on Railsのインメモリキャッシュストアのキーを一覧表示するにはどうすればよいですか?
Ruby on Railsのメモリ内キャッシュストアのキーを一覧表示するにはどうすればよいですか?
ActiveSupport::Cache::MemoryStoreは、ストアのキーに直接アクセスする方法を提供していません(親クラスActiveSupport::Cache::Storeもありません)。
class InspectableMemoryStore < ActiveSupport::Cache::MemoryStore
def keys
@data.keys
end
end
ActionController::Base.cache_store = InspectableMemoryStore.new
Rails.cache.keys # => [ "foo", ... ]
しかしこれは、通常の警告が付属しています:MemoryStoreの内部あなたは猿パッチできたかのキーを取得するには、それをサブクラスよう
内部MemoryStoreは、しかし、@data
と呼ばれるハッシュに例えば、すべてを保持します実装はいつでも変更される可能性があり、@data
が消えたり、respond_to? :keys
以外のものに変更される可能性があります。これは
class InspectableMemoryStore < ActiveSupport::Cache::MemoryStore
def write *args
super
@inspectable_keys[ args[0] ] = true
end
def delete *args
super
@inspectable_keys.delete args[0]
end
def keys
@inspectable_keys.keys
end
end
:賢く実装はwrite
とdelete
方法(パブリックAPIの一部として、彼らは予期せず変更する可能性は低いです、ので)例えば、キーの独自のリストを維持するために上書きするかもしれません非常に純粋な実装であり、もちろんキーを追加の構造に保つことはいくらかのメモリを消費しますが、あなたは要点を得ることができます。
キーに動的にアクセスする必要がない場合は、キャッシュが格納されているディレクトリを簡単に見つけることができます。エントリごとにファイルが作成されます。私の場合は
これは「APP_ROOTを/ tmp /キャッシュ」にあったが、あなたは簡単に、私はちょうど、キーの名前をチェックしたいコンソールをレールに行くと
1.8.7 :030 > Rails.cache.clear
=> ["path_to_rails_app/tmp/cache/6D5"]
しかし、あなたのソリューションは、ファイルcache.ifを使って私がバックエンドキャッシュとしてmemcachedを使用しているときにしか動作しませんでしたが、これは動作しません。 – qichunren
を入力して、それを見つけることができます。それはトリック、大きな感謝を行う! – Nerian
'ActionController :: Base.cache_store = InspectableMemoryStore.new'を設定したファイルは何ですか? – Paul
@Paul環境ファイル(例: 'config/environment/development.rb'です。それが 'Rails.application.configure do ... end'ブロックの中にある場合、' config.cache_store = InspectableMemoryStore.new'になります。 – jwadsack