2

memcache にキャッシュしたいページがあります。私は Heroku を使用しているため、標準のページ キャッシュはオプションではありません。

特定の Cookie 値が設定されているかどうかをチェックするミドルウェアが必要です。そこにない場合は、キャッシュ内の値をレンダリングしたいだけです。それ以外の場合は、Rails で通常どおりに処理してから、オプションのサーバーでキャッシュ内の値を後でコントローラーで (Cookie 内の値をチェックしてから) 処理するようにします。

したがって、基本的には、memcache にページをキャッシュし、後でそれを提供する方法が必要です。ページがレイアウトやアセット パイプラインなどを利用できるように、静的ファイルだけを使用したくありません。したがって、主な問題は、ページを memcache にレンダリングする方法だと思います。

どんな助けでも大歓迎です。

4

4 に答える 4

3

Rack :: Cacheは必要な処理を実行し、本番環境では自動的に有効になります。HTTPヘッダーを使用して、キャッシュ動作を決定します。これらのヘッダーは、、およびコントローラーアクションで呼び出すことで設定fresh_whenできstale?ますexpires_inpublic: trueただし、Rack::Cacheのオプションを設定して取得することが重要です。

fresh_when @product, public: true

キャッシュはデフォルトで保存さRails.cacheれるため、memcachedを使用するように構成する必要があります。

このアプローチの優れた副作用は、HTTPキャッシングを使用するため、キャッシュをクライアント側のブラウザまたはローカルネットワークプロキシに保存できることです。これにより、キャッシュが近くなるため、サイトはユーザーにとってさらに速く感じられます。

このRailsCastsエピソードでさらに詳しく説明します(有料サブスクリプションが必要です)

于 2012-06-29T20:16:45.050 に答える
3

私は、Procでcaches_actionを使用して素晴らしいパフォーマンスを見てきました。これを試して:

caches_action :index, :unless => { |c| c.user_logged_in? }

これは、ユーザーがログインしていない場合にmemcacheからページを提供する必要があります。アクションをキャッシュしているため、application_controller内のすべてが最初に実行されます(便利ですが、確かに遅くなります)。この戦略では、ページが10ミリ秒未満の範囲でmemcacheから読み込まれるのを確認しました。これは、ミドルウェアに飛び込む必要がなくてもうまくいくはずです。

それだけでは不十分な場合は、Rack::Cacheを確認することをお勧めします。

于 2012-06-29T17:20:44.733 に答える
1

ページ キャッシングは Heroku でも機能しますが、少し設定が必要です。バンブー スタックを使用している場合は、アプリの前に既に Varnish があります。Cedar を使用している場合は必要ありませんが、キャッシュ オプションはまだあります。以下をご覧になることをお勧めします。

https://devcenter.heroku.com/articles/caching-strategies

ページキャッシング、アクションキャッシング、フラグメントキャッシングなど、いくつかの戦略が概説されています。

キャッシュ プラグインが必要です (私は memcache を使用していますが、代替手段があると思います)。大きなキャッシュが必要ない場合は、スターター パッケージは無料です。

于 2012-06-29T17:25:08.070 に答える
1
Rails.cache 'somekey' do
   do_whatever
end

これはキーを取得しようとし、存在する場合はレンダリングします。そうでない場合は、ブロックを処理し、キーを値に設定します

于 2012-06-29T17:02:03.967 に答える