From 0437b071a1449d9eecb617f16d4f55da80d4c691 Mon Sep 17 00:00:00 2001 From: pg6fnlak2 <306317677@qq.com> Date: Sun, 9 Nov 2025 16:26:29 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BB=84=E8=87=BB=E4=BB=A3=E7=A0=81=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servermanager/MemcacheStorage.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/DjangoBlog-master/servermanager/MemcacheStorage.py b/src/DjangoBlog-master/servermanager/MemcacheStorage.py index 38a7990..2019f91 100644 --- a/src/DjangoBlog-master/servermanager/MemcacheStorage.py +++ b/src/DjangoBlog-master/servermanager/MemcacheStorage.py @@ -5,28 +5,83 @@ from djangoblog.utils import cache class MemcacheStorage(SessionStorage): + """ + 基于Memcache的会话存储实现类 + + 该类继承自SessionStorage,使用memcache作为后端存储来管理会话数据 + + Args: + prefix (str): 存储键名的前缀,默认为'ws_' + """ def __init__(self, prefix='ws_'): self.prefix = prefix self.cache = cache @property def is_available(self): + """ + 检查存储是否可用 + + 通过设置并获取一个测试值来验证存储服务的可用性 + + Returns: + bool: 存储服务可用返回True,否则返回False + """ value = "1" self.set('checkavaliable', value=value) return value == self.get('checkavaliable') def key_name(self, s): + """ + 生成带前缀的完整键名 + + Args: + s (str): 原始键名 + + Returns: + str: 添加前缀后的完整键名 + """ return '{prefix}{s}'.format(prefix=self.prefix, s=s) def get(self, id): + """ + 根据ID获取会话数据 + + Args: + id (str): 会话ID + + Returns: + dict: 解析后的会话数据字典 + """ + # 构造完整的缓存键名 id = self.key_name(id) + # 从缓存中获取会话数据,如果不存在则返回空JSON对象 session_json = self.cache.get(id) or '{}' + # 将JSON字符串解析为Python对象并返回 return json_loads(session_json) def set(self, id, value): + """ + 设置会话数据 + + Args: + id (str): 会话ID + value (any): 要存储的会话数据 + """ + # 构造完整的缓存键名 id = self.key_name(id) + # 将数据序列化为JSON字符串并存储到缓存中 self.cache.set(id, json_dumps(value)) def delete(self, id): + """ + 删除指定ID的会话数据 + + Args: + id (str): 要删除的会话ID + """ + # 构造完整的缓存键名 id = self.key_name(id) + # 从缓存中删除对应的会话数据 self.cache.delete(id) +