Gogs 3b58377429 gengxin vor 4 Monaten
..
Login.py f016599947 用户登录提交 vor 1 Jahr
PostgreSQL.py 4288dc99fa 配置文件加密 vor 8 Monaten
README_StateManager.md 3b58377429 gengxin vor 4 Monaten
Redis.py 4288dc99fa 配置文件加密 vor 8 Monaten
StateManager.py 3b58377429 gengxin vor 4 Monaten
__init__.py f016599947 用户登录提交 vor 1 Jahr
login.png f016599947 用户登录提交 vor 1 Jahr

README_StateManager.md

状态管理器使用说明

概述

StateManager 是一个用于替代 Redis 的状态管理解决方案,专门为 QGIS 处理算法设计。它使用文件系统和内存缓存来存储状态信息,提供了与 Redis 类似的功能,但不需要外部依赖。

主要特性

  • 内存缓存: 快速访问,提高性能
  • 文件持久化: 数据持久存储,支持程序重启
  • 自动过期: 支持设置数据过期时间
  • 线程安全: 适合多线程环境
  • 无外部依赖: 纯 Python 实现,无需安装额外软件

基本用法

1. 导入状态管理器

from processing.tools.Login.StateManager import set_state, get_state, delete_state

2. 设置状态

# 设置状态,使用默认过期时间(30分钟)
set_state("current_table", "my_table_name")

# 设置状态,指定过期时间(60秒)
set_state("temp_data", "some_value", 60)

3. 获取状态

# 获取状态
table_name = get_state("current_table")
if table_name:
    print(f"当前表: {table_name}")
else:
    print("未找到当前表信息")

4. 删除状态

# 删除特定状态
delete_state("current_table")

# 清空所有状态
from processing.tools.Login.StateManager import clear_all_states
clear_all_states()

在算法中的使用

PostGIS 恢复算法

def restoreVector(self, parameters, context, feedback, executing=True):
    # 设置当前恢复表
    set_state("curRestoreTable", tablename)
    
    # 执行恢复逻辑...

PostGIS 更新算法

def updateVector(self, parameters, context, feedback, executing=True):
    # 设置当前更新表
    set_state("curUpdateTable", tablename)
    
    # 执行更新逻辑...

高级用法

1. 使用上下文管理器

from processing.tools.Login.StateManager import get_state_manager

with get_state_manager() as sm:
    sm.set("key1", "value1")
    sm.set("key2", "value2")
    # 自动清理过期数据

2. 检查状态是否存在

from processing.tools.Login.StateManager import get_state_manager

sm = get_state_manager()
if sm.exists("my_key"):
    print("键存在且未过期")

3. 设置过期时间

from processing.tools.Login.StateManager import get_state_manager

sm = get_state_manager()
sm.expire("my_key", 120)  # 设置2分钟后过期

配置选项

缓存目录

默认情况下,状态管理器使用系统临时目录。可以通过以下方式自定义:

from processing.tools.Login.StateManager import StateManager

# 使用自定义目录
sm = StateManager(cache_dir="/path/to/custom/cache")

# 使用相对路径
sm = StateManager(cache_dir="./cache")

默认过期时间

默认过期时间为 30 分钟,可以在创建实例时修改:

sm = StateManager()
sm.default_expire = 60 * 60  # 设置为1小时

性能考虑

  • 内存缓存: 提供最快的访问速度
  • 文件持久化: 在程序重启后保持数据
  • 自动清理: 定期清理过期数据,避免内存泄漏
  • 批量操作: 支持批量获取和设置操作

错误处理

状态管理器包含完善的错误处理机制:

  • 文件读写失败时自动回退到内存缓存
  • 网络或权限问题时优雅降级
  • 详细的错误日志记录

迁移指南

从 Redis 迁移

  1. 替换导入语句:

    # 旧代码
    from processing.tools.Login.Redis import Redis
       
    # 新代码
    from processing.tools.Login.StateManager import set_state, get_state
    
  2. 替换方法调用:

    # 旧代码
    redis = Redis()
    redis.set("key", "value")
    value = redis.get("key")
       
    # 新代码
    set_state("key", "value")
    value = get_state("key")
    
  3. 移除连接管理:

    # 旧代码
    redis = Redis()
    # ... 使用 redis
    redis.close()
       
    # 新代码 - 无需手动管理连接
    set_state("key", "value")
    

注意事项

  1. 数据持久性: 文件缓存存储在临时目录中,系统重启后可能被清理
  2. 并发访问: 支持多线程访问,但需要注意文件锁
  3. 磁盘空间: 确保缓存目录有足够的磁盘空间
  4. 权限: 确保程序有权限读写缓存目录

故障排除

常见问题

  1. 权限错误: 检查缓存目录的读写权限
  2. 磁盘空间不足: 清理缓存目录或更改存储位置
  3. 性能问题: 检查内存使用情况,适当调整缓存策略

调试模式

启用详细日志记录:

import logging
logging.basicConfig(level=logging.DEBUG)

总结

StateManager 提供了一个轻量级、高性能的状态管理解决方案,完全替代了 Redis 的功能。它特别适合 QGIS 处理算法的使用场景,提供了简单易用的 API 和可靠的性能表现。