Djangoのキャッシュを使ってみたが良いなー

今回は、
Djangoの「低水準のキャッシュ API」を使って、
キャッシュを取ることにしてみた。

これ抜群に良いな。
必要な部分(サイトバーやメイン部分の一部など)やオブジェクト丸ごとキャッシュしてやったりと、
色々出来る。

各ユーザーごとにページがある場合なんかは、
そのユーザーごとにキャッシュを取るようにしてあげるなんて事をやってみた。

今回はローカルメモリ上に残すのをやってみる。

まずは、
settings.pyに以下を加える。

[python]CACHE_BACKEND = ‘locmem:///'[/python]

Djangoオンラインドキュメント和訳に載っていたが、

このキャッシュはマルチプロセスセーフかつスレッドセーフ

良いねー。

次にキャッシュを実際に保存する部分

今回は全てviews.pyで行った。

[python]from django.core.cache import cache[/python]

cacheモジュールをインポートする。

後はcacheを使ったり、変更したり削除したりなどしてみる。
仮にユーザー情報をキャッシュに入れてみた。
ユーザー情報は「user_id」から取得出来るのが前提とした。
キャッシュも「user_id」で紐づけてみた。

[python]if cache.get(user_id):
object = cache.get(user_id)
else:
object = get_user_object(user_id)
cache.set(user_id, object, 3600)[/python]

などしてあげると、
ユーザーのIDで指定したキャッシュがあれば、
それを使用して無ければ、
ユーザーのオブジェクトを取得するメソッド(仮でget_user_objectとした)なんかで取得する。
その取得したオブジェクトをキャッシュに入れてやる。
これだけでOK。

後はキャッシュが要らない場合に削除したい。
そんな時は下記で実現出来る。

[python]cache.delete(user_id)[/python]

ってしてあげれば削除出来る。
今回やったもの以外にも

・テンプレートの部分的キャッシュ
・ビュー単位のキャッシュ
・サイト単位のキャッシュ

などもやってみたいので、
そちらも試してみよう。

いやーDjangoがまた好きになるなぁー。

Django のキャッシュフレームワーク

投稿者:

kishir

趣味: sk8, ピスト、ターンテーブル、レコード 仕事: Python, Objective-C, PHP, JavaScript