# 状态管理器使用说明 ## 概述 `StateManager` 是一个用于替代 Redis 的状态管理解决方案,专门为 QGIS 处理算法设计。它使用文件系统和内存缓存来存储状态信息,提供了与 Redis 类似的功能,但不需要外部依赖。 ## 主要特性 - **内存缓存**: 快速访问,提高性能 - **文件持久化**: 数据持久存储,支持程序重启 - **自动过期**: 支持设置数据过期时间 - **线程安全**: 适合多线程环境 - **无外部依赖**: 纯 Python 实现,无需安装额外软件 ## 基本用法 ### 1. 导入状态管理器 ```python from processing.tools.Login.StateManager import set_state, get_state, delete_state ``` ### 2. 设置状态 ```python # 设置状态,使用默认过期时间(30分钟) set_state("current_table", "my_table_name") # 设置状态,指定过期时间(60秒) set_state("temp_data", "some_value", 60) ``` ### 3. 获取状态 ```python # 获取状态 table_name = get_state("current_table") if table_name: print(f"当前表: {table_name}") else: print("未找到当前表信息") ``` ### 4. 删除状态 ```python # 删除特定状态 delete_state("current_table") # 清空所有状态 from processing.tools.Login.StateManager import clear_all_states clear_all_states() ``` ## 在算法中的使用 ### PostGIS 恢复算法 ```python def restoreVector(self, parameters, context, feedback, executing=True): # 设置当前恢复表 set_state("curRestoreTable", tablename) # 执行恢复逻辑... ``` ### PostGIS 更新算法 ```python def updateVector(self, parameters, context, feedback, executing=True): # 设置当前更新表 set_state("curUpdateTable", tablename) # 执行更新逻辑... ``` ## 高级用法 ### 1. 使用上下文管理器 ```python from processing.tools.Login.StateManager import get_state_manager with get_state_manager() as sm: sm.set("key1", "value1") sm.set("key2", "value2") # 自动清理过期数据 ``` ### 2. 检查状态是否存在 ```python from processing.tools.Login.StateManager import get_state_manager sm = get_state_manager() if sm.exists("my_key"): print("键存在且未过期") ``` ### 3. 设置过期时间 ```python from processing.tools.Login.StateManager import get_state_manager sm = get_state_manager() sm.expire("my_key", 120) # 设置2分钟后过期 ``` ## 配置选项 ### 缓存目录 默认情况下,状态管理器使用系统临时目录。可以通过以下方式自定义: ```python from processing.tools.Login.StateManager import StateManager # 使用自定义目录 sm = StateManager(cache_dir="/path/to/custom/cache") # 使用相对路径 sm = StateManager(cache_dir="./cache") ``` ### 默认过期时间 默认过期时间为 30 分钟,可以在创建实例时修改: ```python sm = StateManager() sm.default_expire = 60 * 60 # 设置为1小时 ``` ## 性能考虑 - **内存缓存**: 提供最快的访问速度 - **文件持久化**: 在程序重启后保持数据 - **自动清理**: 定期清理过期数据,避免内存泄漏 - **批量操作**: 支持批量获取和设置操作 ## 错误处理 状态管理器包含完善的错误处理机制: - 文件读写失败时自动回退到内存缓存 - 网络或权限问题时优雅降级 - 详细的错误日志记录 ## 迁移指南 ### 从 Redis 迁移 1. **替换导入语句**: ```python # 旧代码 from processing.tools.Login.Redis import Redis # 新代码 from processing.tools.Login.StateManager import set_state, get_state ``` 2. **替换方法调用**: ```python # 旧代码 redis = Redis() redis.set("key", "value") value = redis.get("key") # 新代码 set_state("key", "value") value = get_state("key") ``` 3. **移除连接管理**: ```python # 旧代码 redis = Redis() # ... 使用 redis redis.close() # 新代码 - 无需手动管理连接 set_state("key", "value") ``` ## 注意事项 1. **数据持久性**: 文件缓存存储在临时目录中,系统重启后可能被清理 2. **并发访问**: 支持多线程访问,但需要注意文件锁 3. **磁盘空间**: 确保缓存目录有足够的磁盘空间 4. **权限**: 确保程序有权限读写缓存目录 ## 故障排除 ### 常见问题 1. **权限错误**: 检查缓存目录的读写权限 2. **磁盘空间不足**: 清理缓存目录或更改存储位置 3. **性能问题**: 检查内存使用情况,适当调整缓存策略 ### 调试模式 启用详细日志记录: ```python import logging logging.basicConfig(level=logging.DEBUG) ``` ## 总结 `StateManager` 提供了一个轻量级、高性能的状态管理解决方案,完全替代了 Redis 的功能。它特别适合 QGIS 处理算法的使用场景,提供了简单易用的 API 和可靠的性能表现。