Mezzanine の
Cache を
潤沢に
database cache を
0. 前提
以下の
OS
CentOS release 6.9 (Final)Python Version
Python 2.7.8Package (必要そうな
ものだけ 抜粋)
Django (1.10.6)
Mezzanine (4.2.3)DATABASE
psql (8.4.20)
1. 参考
2. 実施した こと
2-0. cache Middleware の 確認
"mezzanine.core.middleware.UpdateCacheMiddleware"
と、"mezzanine.core.middleware.FetchFromCacheMiddleware"
が
サイトごとの
Mezzanine の
- MIDDLEWARE_CLASSES の
設定抜粋 MIDDLEWARE_CLASSES = ( "mezzanine.core.middleware.UpdateCacheMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.locale.LocaleMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.middleware.common.CommonMiddleware", # ADD SessionAuthenticationMiddleware 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.messages.middleware.MessageMiddleware", # ADD XFrameOptionsMiddleware 'django.middleware.clickjacking.XFrameOptionsMiddleware', "mezzanine.core.request.CurrentRequestMiddleware", "mezzanine.core.middleware.RedirectFallbackMiddleware", "mezzanine.core.middleware.TemplateForDeviceMiddleware", "mezzanine.core.middleware.TemplateForHostMiddleware", "mezzanine.core.middleware.AdminLoginInterfaceSelectorMiddleware", "mezzanine.core.middleware.SitePermissionMiddleware", # Uncomment the following if using any of the SSL settings: # DEL "mezzanine.core.middleware.SSLRedirectMiddleware", "mezzanine.pages.middleware.PageMiddleware", "mezzanine.core.middleware.FetchFromCacheMiddleware", )
2-1. cache 用の table を 作成する
データベース Cache を
python2.7 manage.py createcachetable blog_cache
戻りが
python2.7 manage.py dbshell
で
以下、
\d blog_cache ------------------------------------------------------ テーブル "public.blog_cache" カラム | 型 | 修飾語 -----------+--------------------------+---------- cache_key | character varying(255) | not null value | text | not null expires | timestamp with time zone | not null インデックス: "blog_cache_pkey" PRIMARY KEY, btree (cache_key) "blog_cache_expires" btree (expires) ------------------------------------------------------
2-2. settings.py に CACHES 定義を 追加
############################## # Cache Middleware Settings ############################## CACHE_MIDDLEWARE_ALIAS = 'default' CACHE_MIDDLEWARE_SECONDS = 60 * 60 * 24 CACHE_MIDDLEWARE_KEY_PREFIX = 'middleware' # KEY_FUNCTION from django.utils.encoding import smart_str def make_key(key, key_prefix, version): return '_'.join([key_prefix, str(version), smart_str(key)]) ########################## # CACHE SETTINGS ########################## CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'blog_cache', 'TIMEOUT': 60 * 60 * 24 , 'OPTIONS': { 'MAX_ENTRIES': 1000, 'CULL_FREQUENCY': 2, }, 'KEY_PREFIX' : 'blog', 'VERSION' : 1, 'KEY_FUNCTION' : make_key } }
ミドルウェア設定の
説明 最初よくわかっていなかったですが、 ミドルウェアに よる Cache の 有効期限の 設定は、
はこちらの 値が 効いてきます。 TIMEOUT
の設定が 効くと 思い 込んで おり、
動作を理解するのに 小2時間程度かかってしまいました。 CACHE_MIDDLEWARE_ALIAS
ミドルウェア側が使用する Cache の エイリアス名です。 デフォルトは ‘default’ CACHE_MIDDLEWARE_SECONDS
ミドルウェアのCache の 有効期限、 60 * 60 * 24秒で、 1日を 設定しています。 デフォルトは 600秒です。 CACHE_MIDDLEWARE_KEY_PREFIX
ミドルウェアが作成する Cacheキーの prefix に なります。
KEY_PREFIX
にさらに 追加される 形で 付与されそうです。 前なのか 後なのかは、 ちょっと わかりませんでした。
CACHES設定の
説明 BACKEND
DB キャッシュの場合は、 django.core.cache.backends.db.DatabaseCache
を設定します。 LOCATION
キャッシュテーブル名を設定します。 TIMEOUT
キャッシュを保持する 秒数を、 60 * 60 * 24秒で、 1日を 設定しています。
ミドルウェアのCacheのみ 今回は 使っているので この 値は 使用されません。
template レベル view レベルのCache などの 場合に この 値は 効いてくるのかと。 OPTIONS MAX_ENTRIES
保持するキャッシュの 数を 設定します。 OPTIONS CULL_FREQUENCY
キャッシュの保持数が 閾値を 超えた 場合どの くらいの キャッシュ数を 消すかを 指定します。
MAX_ENTRIES
1000 で、OPTIONS CULL_FREQUENCY
が、2 なので、 超えた 場合は、 500 エントリが 削除されます。 KEY_PREFIX
キャッシュのキー値に 付与する prefix名を 指定 VERSION
キャッシュのキー値に 付与する version番号を 指定 KEY_FUNCTION
キャッシュのキー値生成に 使用する 関数を 指定
3. Mezzanine の 拡張された Cache 設定
基本的に
3.1 Cache Middleware の 設定
CACHE_ANONYMOUS_ONLY
にFalse
を設定しても 無視され、 認証ユーザーには、 キャッシュされていない、 生の コンテンツが 表示される。 キャッシュの
キーには、 Site の ID と、 アクセスしている デバイスの 種類(mobileとか、 Desktopなど)が 含まれる。 キャッシュキーは
Vary ヘッダーを 考慮しないため、 末認証ユーザーには URLごとに 同じ ページコンテンツを 返す。
3.2 templatetag
末認証ユーザーに、
template のnevercache
、endnevercache
タグで
3.3 MINT CACHE
CACHE_SET_DELAY_SECONDS
と
キャッシュエントリの
ミントキャッシングと
使用されるCACHE_SET_DELAY_SECONDS
設定値を
キャッシュミスが
Mezzanine の 設定を 値に ついての 感想。
2.1 Cache Middleware の
設定
CMS用途で使う ことを 想定する とこの 動作で 問題が ないように 思います。 2.2 templatetag
これは、個人的な 使用用途では 設定する 必要は ないと、 判断しました。 2.3 MINT CACHE
これは正直あまり 理解できて おりません。。
設定なし(0秒)でとりあえず置いて おく ことにしました。
4. Cache設定後の パフォーマンス
Cache なしの
0.5秒程度に
以上です。
コメント