You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
from werobot . session import SessionStorage
from werobot . utils import json_loads , json_dumps
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 )