Django/Mezzanine Database Cache の
その後、
実施した
前提
以下の
OS
CentOS release 6.9 (Final)Python Version
Python 2.7.8Memcached Memcached 1.4.4 1
Package (必要そうな
ものだけ 抜粋)
Django (1.10.6) 2
1. 長いので
Cent OS 6.9 に
2. Mezzanine も
Memcached python-memcached、 pylibmc の どちらを 使うか
Djagno のpython-memcached
、pylibmc
と
どっちをpylibmc
を
- python-mecached を
使う ほうが 簡単だが、 パフォーマンスは pylibmc の ほうが 早い、 - セキュリティ的な
リスクは、 テキストプロトコルより、もバイナリープロトコルに したほうが、 低そう。 1.
、2.
よりpylibmc
を'binary': True
で使うのが よさそう。 3.
でpylibmc
を試すが、 どうにもうまく インストールできない。 python-memcached
をインストールし 使う。
Memcached の python-memcached を インストール、 設定する
以下、
インストール
pip install python-memcached
settings.py に cache 設定を 追加
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', 'TIMEOUT': 60 * 60 * 24, 'OPTIONS': { 'debug': 0, 'pickleProtocol': 0, #'pickler': pickle.Pickler, #'unpickler': pickle.Unpickler, #'compressor': zlib.compress, #'decompressor': zlib.decompress, 'pload': None, 'pid': None, 'server_max_key_length': 250, 'server_max_value_length': 1024 * 1024, 'dead_retry': 30, 'socket_timeout': 3, 'cache_cas': False, 'flush_on_reconnect': 0, 'check_keys': True } } }
OPTIONS 設定の
説明
正直、何が 起こるのかよくわからない プロパティが 多く、 基本的に デフォルト値を 設定しています。
OPTIONS 以外の設定に ついては、 Django/Mezzanine Database Cache の 設定を してみる | Monotalk の 説明を 参照ください。
LOCATION
設定以外は、Memcached でも 設定できるかと 思います。 - debug
サーバに接続できない 場合に エラーメッセージを 表示するか
デフォルト 0 で、1以上の 数値を 設定すると メッセージ出力 - pickleProtocol
(c)Pickle の使用する 番号 デフォルト 0 - pickler
カスタム Pickler を指定する。 デフォルト pickle.Pickler
- unpickler
カスタム Unpickler を指定する。 デフォルト pickle.Unpickler
- compressor
カスタム compressor を指定する。 デフォルト zlib.compress
- decompressor
カスタム decompressor を指定する。 デフォルト zlib.decompressor
- pload
カスタム persistent_load 関数を指定する。 cPickel は subclass 化が 許可されないので、 この 指定で 代用する。 デフォルト None
- pid
カスタム persistent_id 関数。cPickel は subclass 化が 許可されないので、 この 指定で 代用する。 デフォルト None
- server_max_key_length
キー値の最大長を 指定、 デフォルト 250 バイト - server_max_value_length
Value 値の最大長を 指定、 デフォルト 1024 * 1024 で 1 MB - dead_retry
ブラックリストに載った サーバに、 再試行を 試みるまでの 時間 デフォルト 30秒 - socket_timeout
ソケットタイムアウト デフォルト 3秒 - cache_cas
cas 操作はキャッシュするかどうか デフォルト False - flush_on_reconnect
再接続時に、データを 書き出すかどうか? デフォルトは 0 オフ - check_keys
キーをチェックするかどうか、 デフォルト True
- debug
Cache 設定後の パフォーマンス
以下、
Cache なしの
場合
1.7 秒DB Cache の
場合
0.5秒程度Memcached Cache の
場合
0.15秒程度
All In One 構成 で、
参考
以下、
Django’s cache framework | Django documentation | Django
Django のドキュメント Cache の 頁です。 Memcachedの
通信プロトコルの 違いによる パフォーマンスを 比較してみた (Binary か Text(Ascii)か ) - Iruca Log
Memcached のプロトコルで パフォーマンスが 違う旨が 記載されています。 Memcachedの
プロトコル仕様と セキュリティ – Memcachedでも インジェクションが 可能 | yohgaki’s blog
Memcachedのプロトコル仕様と セキュリティが 記載されています。 Best Python memcache client: Python-memcached v/s Pylibmc | Simplify Complexities
Python-memcached とPylibmc の 比較した コメントが 記載されています。
以上です。
コメント