Update MemcacheStorage.py

master
zxc 4 months ago
parent 06981cdda4
commit 5e97ac4351

@ -5,28 +5,66 @@ from djangoblog.utils import cache
class MemcacheStorage(SessionStorage):
"""
基于Memcache的微信WeRoBot会话存储实现用于在微信机器人开发中持久 持久化存储用户会话数据如对话状态临时信息等
"""
def __init__(self, prefix='ws_'):
self.prefix = prefix
self.cache = cache
"""
初始化会话存储
:param prefix: 缓存键的前缀用于区分不同类型的缓存数据默认'ws_'WeChat Session缩写
"""
self.prefix = prefix # 缓存键前缀
self.cache = cache # 引入Django项目中的缓存实例通常配置为Memcache
@property
def is_available(self):
value = "1"
self.set('checkavaliable', value=value)
return value == self.get('checkavaliable')
"""
检查缓存存储是否可用
:return: 布尔值True表示可用False表示不可用
"""
test_value = "1"
# 尝试写入测试数据
self.set('check_available', value=test_value)
# 读取测试数据并对比,验证缓存读写功能是否正常
return test_value == self.get('check_available')
def key_name(self, s):
return '{prefix}{s}'.format(prefix=self.prefix, s=s)
"""
生成带前缀的缓存键名避免不同类型数据的键冲突
:param s: 原始键名如用户ID
:return: 带前缀的完整键名'ws_user123'
"""
return f'{self.prefix}{s}'
def get(self, id):
id = self.key_name(id)
session_json = self.cache.get(id) or '{}'
"""
从缓存中获取会话数据
:param id: 会话ID通常为用户标识如OpenID
:return: 反序列化后的会话数据字典
"""
# 生成带前缀的键名
cache_key = self.key_name(id)
# 从缓存读取数据默认返回空JSON字符串'{}'
session_json = self.cache.get(cache_key) or '{}'
# 将JSON字符串反序列化为Python字典
return json_loads(session_json)
def set(self, id, value):
id = self.key_name(id)
self.cache.set(id, json_dumps(value))
"""
将会话数据存入缓存
:param id: 会话ID
:param value: 要存储的会话数据字典类型
"""
cache_key = self.key_name(id)
# 将数据字典序列化为JSON字符串后存入缓存
self.cache.set(cache_key, json_dumps(value))
def delete(self, id):
id = self.key_name(id)
self.cache.delete(id)
"""
从缓存中删除会话数据
:param id: 会话ID
"""
cache_key = self.key_name(id)
# 删除指定键的缓存数据
self.cache.delete(cache_key)

Loading…
Cancel
Save