diadia

興味があることをやってみる。自分のメモを残しておきます。

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について:

memcached - Wikipedia

第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

sessionデータの保存をどこにするか示す例

Djangoのセッション設定 - 知的好奇心