Django框架下如何获取memcached存储的所有会话并实现手动管理
Django Memcached 会话管理实现方案
前置说明
Memcached 本身未提供高性能的全量键遍历能力,直接使用keys *命令会遍历所有存储条目,导致实例阻塞影响线上业务。下述方案中小规模站点/测试环境可直接使用,大规模生产环境建议额外维护会话索引库避免直接扫描Memcached。
1. 确认基础配置
首先确认项目settings.py中的相关配置,后续键前缀构造需要和配置对齐:
# settings.py 参考配置 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache', 'LOCATION': '127.0.0.1:11211', 'KEY_PREFIX': 'myproject', # 无配置则填空字符串 'VERSION': 1, # 未手动修改则默认是1 } }
2. 获取所有会话实现
基于Django原生的SessionStore和Memcached的scan迭代能力实现全量会话读取:
from django.conf import settings from django.contrib.sessions.backends.cache import SessionStore from django.core.cache import cache # 构造会话键前缀,和Django缓存生成规则对齐 SESSION_KEY_PREFIX = f"{settings.CACHES['default']['KEY_PREFIX']}:{settings.CACHES['default']['VERSION']}:django.contrib.sessions.cache" def get_all_sessions(): session_list = [] # 获取Memcached原生客户端实例 memcached_client = cache._cache # 迭代所有符合规则的会话键,不会阻塞实例 for raw_key in memcached_client.scan_iter(f"{SESSION_KEY_PREFIX}*"): # 提取纯session key session_key = raw_key.decode().split(SESSION_KEY_PREFIX)[1] session = SessionStore(session_key=session_key) # 过滤已过期的无效会话 if session.exists(session_key): session_list.append({ "session_key": session_key, "user_id": session.get("_auth_user_id"), "expire_at": session.get_expiry_date(), "raw_data": session.load() }) return session_list
如果你使用旧版
python-memcached驱动没有scan_iter方法,仅测试环境可替换为memcached_client.keys(f"{SESSION_KEY_PREFIX}*")获取键,禁止在生产环境使用该写法。
3. 删除指定会话实现
Django原生提供了会话删除的封装,直接调用即可:
def delete_target_session(session_key: str) -> bool: session = SessionStore(session_key=session_key) session.delete() return True
4. 集成到Web界面
你可以按照常规Django视图逻辑开发管理页面:
- 开发查询视图,调用
get_all_sessions()获取会话列表,传入模板渲染成表格展示 - 开发删除视图,接收前端传来的
session_key参数,调用delete_target_session()执行删除 - 给管理页面加管理员权限校验,避免未授权访问泄露会话数据
注意事项
- 会话量级超过1万的生产环境不建议直接扫描Memcached,可在用户登录/登出时同步将会话的关键信息(session_key、用户ID、过期时间)写入数据库,管理后台直接查询数据库即可,不需要操作Memcached
- 不要将会话的完整原始数据暴露给前端,避免敏感信息泄露
内容的提问来源于stack exchange,提问作者Mislav
相关产品推荐
相关产品推荐

