今回は、
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 のキャッシュフレームワーク