djangoのキャッシュを使ったセッションの設定
ドキュメント:
https://docs.djangoproject.com/ja/3.1/topics/http/sessions/#using-cached-sessions
https://docs.djangoproject.com/ja/3.1/topics/cache/#django-s-cache-framework
手順
1 . 概要
今回memcachedにデータを保存するセッション方式の実装を試してみた。
手順としてはdjangoのキャッシュフレームワークを利用する準備を行い、その後セッションエンジンにキャッシュを使う旨を宣言する。
そして実際にキャッシュのソフトウエアをローカルで起動する。
するとキャッシュをセッションデータの保存先にできる。
2 . キャッシュフレームワークにmemcachedを使う宣言をする
settings.pyにキャッシュフレームワークの設定を書く。
# settings.pyにて CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } }
一言:キャッシュの設定はCACHES={}で設定する。キャッシュの種類は、memcashed, databaseに保存するcache, fileに保存するcacheとかいろいろ種類あり。
3 . セッションデータをキャッシュに保存する宣言をする
# settings.pyにてセッションエンジンをキャッシュ使用を宣言する SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
4 . macで動かす場合brew services start memcashedを実行する
memcachedはソフトウエアであることが分かった。てことで環境にmemcachedが存在していなければまずそれをインストールするところから、あればそれを起動する。起動していない状態でdjangoアプリを実行するとsessionがうまく働かずエラーが起きてしまう。
brew install memcashed brew services start memcached
memcachedについて:
第1回 memcachedの基本:memcachedを知り尽くす|gihyo.jp … 技術評論社
補足
installed_appsから'django.contrib.sessions'を削除してもそのまま動き続けるのかという疑問??
=> 何ごともなく動いた。クライアントのクッキーにも登録されていることを確認した。
上記の結果から、セッションデータをdatabaseに登録する場合に限ってdjango.contrib.sessionsを使うという仮説を立てる。MIDDLEWAREからSessionMiddlewareを削除したらそのまま動くのかという疑問??
=> MIDDLEWAREからSessionMiddlewareを削除したら以下のエラーが生じた。したがってmemcachedでセッションを使っている場合でもSessionMiddlewareは必要という結論になった。
ERRORS: ?: (admin.E410) 'django.contrib.sessions.middleware.SessionMiddleware' must be in MIDDLEWARE in order to use the admin application.
☆調査できるならmemcachedの内部構造をユーザーの行動と紐付けて観察したい。
参考資料
memcachedを使う場合にはbrew services start memcachedが必要であることを示す資料
Djangoのキャッシュ機能を使って画面表示をもっと高速化する Memcached編 - Qiita
sessionの使い方全容をスッキリまとめた資料
【Django】Sessionの使い方(基本編) | idealive tech blog