Turbogears-caching

提供:Dev Guides
移動先:案内検索

TurboGears –キャッシュ

Webアプリケーションのパフォーマンスを向上させるために、特に長時間の操作に関与している場合は、キャッシュ技術が使用されます。 TurboGearsは、2種類のキャッシュ手法を提供します-

全ページキャッシュ

HTTPプロトコルレベルで動作し、ユーザーのブラウザまたは中間プロキシサーバー(Squidなど)がリクエストをインターセプトし、キャッシュされたファイルのコピーを返すことにより、サーバーへのリクエスト全体を回避します。

アプリケーションレベルのキャッシュ

これはアプリケーションサーバー内で機能し、計算された値(多くの場合、複雑なデータベースクエリの結果)をキャッシュします。これにより、将来のリクエストで値を再計算する必要がなくなります。 Webアプリケーションの場合、アプリケーションレベルのキャッシングにより、複雑なクエリの結果を柔軟にキャッシュできるため、特定のコントローラーメソッドの合計負荷をユーザー固有またはケース固有のいくつかのクエリとテンプレートのレンダリングオーバーヘッドに減らすことができます。 。

アプリケーションレベルのキャッシュ

前述のとおり、「クイックスタート」TurboGearsプロジェクトは、キャッシュサポートのためにBeakerパッケージを有効にするように構成されています。 Beakerは、キャッシュストレージに使用される次のバックエンドをサポートしています-

  • memory -プロセスごとのストレージに使用されます。 非常に高速です。
  • filesystem -プロセスごとのストレージおよびマルチプロセス。
  • * DBMデータベース*-プロセスごと、マルチプロセス、かなり高速。
  • * SQLAlchemyデータベース*-データベースサーバーごとのストレージ。 上記のオプションと比較して遅い。
  • Memcached -マルチサーバーメモリベースのキャッシュ。

コントローラーのキャッシュ

コントローラーの迅速なキャッシュのために、* cached()*デコレーターが利用可能です。 リクエストのさまざまなパラメーターに応じて、コントローラー本体全体がキャッシュされます。 * tg.decorators.cached()*デコレータの定義は次のとおりです。

tg.decorators.cached(key, expire, type,
   query-args, cache_headers, invalidate_on_startup, cache_response)

パラメータの説明は次のとおりです-

Sr.No. Parameters & Description
1

key

キャッシュキーの生成に使用されるコントローラーパラメーターを指定します。

2

expire

キャッシュが期限切れになるまでの秒単位の時間。デフォルトは「never」です。

3

Type

dbm、memory、file、memcached、またはNone。

4

cache_headers

応答ヘッダーを示すヘッダー名のタプル。

5

invalidate_on_startup

Trueの場合、キャッシュはアプリケーションが起動または再起動されるたびに無効になります。

6

cache_response

応答はキャッシュされるかどうか、デフォルトはTrueです。

以下は、コントローラのキャッシュの例です-

@cached(expire = 100, type = 'memory')
@expose()
def simple(self):
   return "This is a cached controller!"

テンプレートレベルのキャッシュ

Genshiテンプレートエンジンは、コンテンツが変更されていない場合、キャッシュからテンプレートを取得します。 このキャッシュのデフォルトサイズは25です。 デフォルトでは、テンプレートの自動再ロードはtrueです。 パフォーマンスを改善するために、次の設定を app_cfg.py で行うことができます-

[app:main]
genshi.max_cache_size = 100
auto_reload_templates = false

テンプレートをキャッシュするには、キャッシュされたテンプレートをレンダリングするコントローラーから tg_cache オプションを返すだけです。

tg_cacheは、次のキーを受け入れる辞書です-

  • key -キャッシュキー。 *デフォルト:*なし。
  • expire -キャッシュが存続する時間。 *デフォルト:*有効期限はありません
  • type -メモリ、dbm、memcached。 デフォルト: dbm。

次の例は、テンプレートのキャッシュを示しています-

@expose(hello.templates.user')
def user(self, username):
   return dict(user = username, tg_cache = dict(key = user, expire = 900))