セッションエンジンとしてDjangoとRedisを使用しています(Celeryも使用していますが、それは別のものです)。それは完全に機能し、速度の向上が見られます。
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
いくつかの方法でアクティブなユーザーをチェックするために毎分実行されるスクリプトがあり、ユーザーが最新の 1 分間アクティブでない場合、セッションは削除されます。これは、顧客の追跡ニーズのために行われます。
セッション エンジンとして Redis に切り替えるまで、このスクリプトは完全に機能していました。セッションは実際に DB から削除されますが、Redis からは削除されません。これには Django の組み込みメソッドは使用していませんが、独自の関数を使用しています。
def clean_sessions():
stored_sessions = Session.objects.all()
active_users = active_users(minutes=1)
active_users_ids = [user.id for user in active_users]
for session in stored_sessions:
session_uid = session.get_decoded().get('_auth_user_id')
if not session_uid:
session.delete()
continue
if session_uid not in active_users_ids:
user = User.objects.get(pk=session_uid)
## some code between ##
session.delete()
私の質問は、ユーザーが実際にログアウトされるように、キャッシュからセッションを削除するにはどうすればよいですか?