7

こんにちは、

Heroku のアプリに Memcached を接続しました。無料マネージド プランの制限は、Memcached の場合は 5MB、Memcachier の場合は 25MB です。ほとんどすべてに慣れていないので、これが何を表しているのかを正確に明確にすることを望んでいました.

構成ファイルで DaliStore をセットアップし、Rack::Cache の典型的なオプションをセットアップしました。私のメタストアは Memcache にあり、エンティティ ストアはファイル システムにセットアップされています。

質問:

  1. これは、5/25MB の制限が、各キャッシュ フラグメントについて保存しているメタ情報によってのみ使用されているということですか? これは、無料プランだけで大量の情報を保存できることを意味しますか?
  2. Rack::Cache と Memcache (Dalli ストア経由) の間の内訳/ストーリーは正確には何ですか?それらは異なる目的を果たしますか? 彼らは同じことをしていますか?つまり、次のコードは冗長です

    config.cache_store = :dalli_store

config.action_dispatch.rack_cache = {
  :verbose      => true,
  :metastore    => Dalli::Client.new,
  :entitystore  => 'file:tmp/cache/rack/body',
  :allow_reload => false
}
4

2 に答える 2

9

私は同様の問題に取り組んできました。

まず、用語をわかりやすく説明しましょう。

  • Memcached:キーと値のペアを実際にメモリに格納するサーバー(dはデーモン用)で実行されているプロセス。
  • cache_storeRails.cache :さまざまなRubyソフトウェア実装を使用するように構成できる単一のAPIを備えたRailsキャッシュストレージ( )。の1つの設定config.cache_store:memory_store、メモリ内の実装を使用することです。もう1つの設定は:dalli_store、dalli gemの使用を指定することです。これは、内部でmemcachedサーバーへのリモート接続を行う可能性があります。
  • Dalliストア:値をmemcachedに物理的に格納するdalligemに裏打ちされたRailsキャッシュを意味すると思います。
  • Rack :: Cache:ヘッダー(Expires、Cache-Control、ETagなど)をHTTP応答に挿入し、リバースプロキシキャッシュとしても機能し、可能な場合はRailsスタックに到達する前にリクエストを処理するRackミドルウェア。ウェブサイトを参照してください。

Rack :: CacheがRailsスタックやアプリの残りの部分に到達する前にリクエストを処理するには、応答とメタデータをどこかに保存する必要があります。物を保管する場所は、設定によって構成されconfig.action_dispatch.rack_cache = { ... }ます。

これはとは異なる設定であることに注意してくださいconfig.cache_store = :dalli_store。それらは関連している必要はありません。これが多くの混乱の原因だと思います。ただし、実際には、両方にmemcachedを使用することをお勧めします。これは、dalli実装を使用することを意味します。ただし、それぞれに独自のDalli::Clientインスタンスがあります。(また、session_storeは関連している可能性がありますが、関連している必要はありません。)

Heroku杉スタックには、dyno間で共有できない一時的なファイルシステムがあります。ただし、Heroku自体は、Rack :: Cacheでのみtmpファイルストレージをentitystore使用し、。にはmemcachedを使用することをお勧めしますmetastore

実際にRack::Cacheメタストアに格納されるものについては、rack-Rack::Cache::MetaStore cachev1.2クラスのドキュメントは次のとおりです。

The MetaStore is responsible for storing meta information about a
request/response pair keyed by the request's URL.

The meta store keeps a list of request/response pairs for each canonical
request URL. A request/response pair is a two element Array of the form:
  [request, response]

The +request+ element is a Hash of Rack environment keys. Only protocol
keys (i.e., those that start with "HTTP_") are stored. The +response+
element is a Hash of cached HTTP response headers for the paired request.

したがって、質問に答えるために、HTTPリクエストヘッダーとHTTPレスポンスヘッダーはRack::Cacheメタストアに保存されます。一方、Rack :: Cacheエンティティストアは応答本文全体(つまりHTML)を格納します。

Herokuではページキャッシングを確実に使用できないため、アクションキャッシングとフラグメントキャッシングを使用している可能性があります。アクションとフラグメントのキャッシュは、Railsキャッシュストアを使用します(ラックキャッシュではありません)。ただし、両方を物理的に同じmemcachedサーバーを使用するように設定した場合、両方がメモリの使用に寄与します。アクションと部分キャッシュは実際のHTMLを保存します。

memcachierを使用している場合は、実際の使用状況をより詳細に把握するには、次のコマンドを実行してブラウザーで分析ダッシュボードを開きます。

heroku addons:open memcachier

memcached統計の取得の詳細については、この質問を参照してください。

于 2013-01-28T18:01:34.647 に答える