キャッシュシステム
Djangoはアクセスの多いニュースサイトの開発をもとに生まれたフレームワークですので、サイトのパフォーマンスを向上させるための有効な仕掛けであるキャッシュ機能はとても充実しています。ここでは商品ページの表示機能にキャッシュの仕組みを導入します。
キャッシュの単位
Djangoでは、キャッシュする情報の粒度をその使用用途に合わせて設定できるようになっています。以下の表にキャッシュの粒度とその説明をまとめました。本稿ではこの中からビュー単位でキャッシュする方法を紹介します。
| キャッシュの粒度 | 説明 |
| サイト単位 | サイト全体をキャッシュします。DBから情報を取得するが、コンテンツ自体の変更はあまりないサイトに向いているでしょう。 |
| ビュー単位 | URLごとに情報をキャッシュします。 |
| オブジェクト単位 | ビューの中で扱うオブジェクトをキャッシュします。 |
| テンプレートの断片単位 | テンプレートの中の一部分をキャッシュします。 |
キャッシュ保存先と設定方法
Djangoでは、キャッシュ情報の保存先を複数用意しているので適切なものを選択して使用することができます。以下の表に使用できるキャッシュの保存先を示します。キャッシュの保存先指定は、プロジェクトフォルダのsettings.py内のCACHE_BACKEND変数に「CACHE_BACKEND='memcached://172.19.26.240:11211'」のように指定します。このようにDjangoでは設定の変更だけで簡単にキャッシュの保存先を変更することができます。
| 保存先 | 設定例 | 説明 |
| memcached | memcached://172.19.26.240:11211; 172.19.26.242:11211/' |
memcachedを使用。複数指定する場合、セミコロンで区切って指定する。パフォーマンス面で最も推奨される方式である。 |
| DB | db://my_cache_table | DBを使用。先にテーブルを作成する必要がある。「my_cache_table」に作成したテーブル名を指定する。 |
| File System | file://c:/codezine/cache (file;//キャッシュ保存先フォルダパス) |
ローカルのファイルシステムを利用します。指定したフォルダの配下にキャッシュファイルが作成されます。 |
| Local-memory | 'locmem:/// | プロセスごとのメモリ内でキャッシュします。プロセス間でキャッシュを共有できないので実用的ではありません。 |
| Dummy | CACHE_BACKEND = 'dummy:///' | 開発時用の設定で、実際にはキャッシュしません。 |
ビュー単位のキャッシュ
それでは早速、ビュー単位のキャッシュを使用してみましょう。商品ページは商品属性が変わらない限り、表示内容はあまり変化がありませんので、キャッシュを使用しDBにアクセスする頻度を下げることで、システム全体の負荷を下げることができます。まずは、settings.pyファイルにキャッシュの保存先の指定をします。リスト20に設定を示しました。この設定では「c:/codezine/cache」というフォルダが作成され、その下にキャッシュファイルが作成されます。
CACHE_BACKEND = 'file://c:/codezine/cache'
次に、キャッシュ対象のビュー関数item_page_displayにデコレータ記述を追加します。リスト21にソースを示します。デコレータに指定する単位は秒です。なお、キャッシュはURL単位でされますので、商品ごとにキャッシュがされます。例えば「http://hostname:8000/item/1」と「http://hostname:8000/item/2」では別々にキャッシュされます。
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) # 単位は秒。15分キャッシュする。
def item_page_display(request,item_id):
# ビュー関数の処理
まとめ
Django チュートリアルとして前編・後編にまたがり、ECサイトを題材に商品ページの表示、商品データ登録用のバックエンド画面(管理インターフェイス)、商品検索フォーム、買い物かご機能、商品ページのキャッシュ機能と実装してきましたが、いかがだったでしょうか。これらの機能を簡潔な記述で、次々と実装できるのを実感されたことと思われます。
また、DjangoはWebアプリケーションフレームワークで必要な機能をフルスタックで用意していますので、使うまでの手順も簡単に済むため取っ付きやすいというのも魅力の一つです。エンジニアはDjangoを使うとすぐにプログラミングにとりかかることができ、すぐにアイデアを動くものとして実現していくことができるので、ものをつくるモチベーションがさらに高まり、開発生産性もスパイラルに上がっていきます。本稿がこれからPythonやDjangoに取り組む人にとっての一助となれば幸いです。
参考資料
- Djangoプロジェクト本家サイト
- 『開発のプロが教える標準Django完全解説』 増田泰・中居良介・露木誠・松原豊 著、アスキー・メディアワークス、2008年6月
