我正在使用Django和Redis作为会话引擎(还有Celery,但那是另一回事)。它运行得非常完美,而且速度也有所提升。
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
我有一个脚本,每分钟运行一次,通过一些方法检查活动用户,如果用户在最近一分钟内没有活动,则会删除会话。这是为了满足客户的跟踪需求而完成的。
这个脚本之前运行得很完美,但当我切换到Redis作为会话引擎时出现了问题。会话确实从数据库中删除了,但没有从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()
我的问题是,如何从缓存中删除会话,以便用户实际上注销?