読者です 読者をやめる 読者になる 読者になる

cacheのKEY_PREFIX, VERSION, KEY_FUNCTION

Django

Django 1.3ではcacheにKEY_PREFIX, VERSION, KEY_FUNCTIONというオプションが追加されていた。

# settings.py
from django.utils.encoding import smart_str

def my_make_key(key, key_prefix, version):
    return ':'.join([key_prefix, str(version), smart_str(key)])

# Cache
CACHES = {
    'default': {
        'BACKEND'     : 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION'    : '127.0.0.1:11211',
        'KEY_FUNCTION': my_make_key,
        'KEY_PREFIX'  : 'perezvon',
        'VERSION'     : 2,
    }
}

KEY_PREFIXとVERSIONはcacheのキーを作る時にdjango.core.cacheによって自動的に付与される文字列。デフォルトはKEY_PREFIXが空文字、VERSIONが1なので、

>> from django.core.cache import cache
>> cache.get('spam')

のように'spam'というキーでキャッシュを取得すると、実際にcacheバックエンドに投げられるキーは':1:spam'のような文字列になる。

開発環境で複数人で同じmemcacheを共有していたりするとKEY_PREFIXは大変有用。また、キーにバージョン番号を入れておくとキャッシュに入っているデータの構造が変わったりした場合などに便利なので、VERSIONも使えそうなオプション。

KEY_FUNCTIONはキャッシュのキーを作る関数を指定できるオプション。KEY_PREFIXやVERSIONのつけ方を変更したい時に使えるかもしれない。

Djangoにはあまり関係ないけど、キャッシュやSchema-lessなKVSを使う際にバージョン番号を付けていないアプリケーションがあったりするのが信じられない。僕が「爆発しろ」って言うまでもなく、しょっちゅう爆発しているのを知っている。