Djangoのクエリをキャッシュして高速化する

Djangoでクエリが遅い問題を解決しようとといろいろ試行錯誤した結果、Cache Machineというライブラリで問題が解決した。

このライブラリを使うと一度発行したクエリを自動でキャッシュしてくれて、2回目以降の呼び出しではキャッシュを読んでくれるのでかなりのレスポンスの高速化ができる。

以下にHerokuで動いているサーバーに導入(キャッシュ先はMemcached)した際のメモを載せておく。

インストール

pip install django-cache-machine

HerokuにMemcachedをインストール

heroku addons:add memcache

settings.pyの編集

# Local
CACHES = {
    'default': {
        'BACKEND':
        'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',

    },
}

# Remote(Heroku側)

if is_remote():
    os.environ['MEMCACHE_SERVERS'] = os.environ.get('MEMCACHIER_SERVERS', '').replace(',', ';')
    os.environ['MEMCACHE_USERNAME'] = os.environ.get('MEMCACHIER_USERNAME', '')
    os.environ['MEMCACHE_PASSWORD'] = os.environ.get('MEMCACHIER_PASSWORD', '')


    CACHES = {
        'default': {
            'BACKEND':
            'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': os.environ['MEMCACHE_SERVERS']
        }
    }

Model側の編集

from caching.base import CachingManager, CachingMixin

class Foo(CachingMixin,models.Model):
    created_date = models.DateTimeField(auto_now=True)
    objects = CachingManager()

以上の手続きが踏めたら完了。 びっくりするくらい簡単だった。:)

Related Contents

Pickup Contents