|
|
vor 4 Monaten | |
|---|---|---|
| .. | ||
| Login.py | vor 1 Jahr | |
| PostgreSQL.py | vor 8 Monaten | |
| README_StateManager.md | vor 4 Monaten | |
| Redis.py | vor 8 Monaten | |
| StateManager.py | vor 4 Monaten | |
| __init__.py | vor 1 Jahr | |
| login.png | vor 1 Jahr | |
StateManager 是一个用于替代 Redis 的状态管理解决方案,专门为 QGIS 处理算法设计。它使用文件系统和内存缓存来存储状态信息,提供了与 Redis 类似的功能,但不需要外部依赖。
from processing.tools.Login.StateManager import set_state, get_state, delete_state
# 设置状态,使用默认过期时间(30分钟)
set_state("current_table", "my_table_name")
# 设置状态,指定过期时间(60秒)
set_state("temp_data", "some_value", 60)
# 获取状态
table_name = get_state("current_table")
if table_name:
print(f"当前表: {table_name}")
else:
print("未找到当前表信息")
# 删除特定状态
delete_state("current_table")
# 清空所有状态
from processing.tools.Login.StateManager import clear_all_states
clear_all_states()
def restoreVector(self, parameters, context, feedback, executing=True):
# 设置当前恢复表
set_state("curRestoreTable", tablename)
# 执行恢复逻辑...
def updateVector(self, parameters, context, feedback, executing=True):
# 设置当前更新表
set_state("curUpdateTable", tablename)
# 执行更新逻辑...
from processing.tools.Login.StateManager import get_state_manager
with get_state_manager() as sm:
sm.set("key1", "value1")
sm.set("key2", "value2")
# 自动清理过期数据
from processing.tools.Login.StateManager import get_state_manager
sm = get_state_manager()
if sm.exists("my_key"):
print("键存在且未过期")
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小时
状态管理器包含完善的错误处理机制:
替换导入语句:
# 旧代码
from processing.tools.Login.Redis import Redis
# 新代码
from processing.tools.Login.StateManager import set_state, get_state
替换方法调用:
# 旧代码
redis = Redis()
redis.set("key", "value")
value = redis.get("key")
# 新代码
set_state("key", "value")
value = get_state("key")
移除连接管理:
# 旧代码
redis = Redis()
# ... 使用 redis
redis.close()
# 新代码 - 无需手动管理连接
set_state("key", "value")
启用详细日志记录:
import logging
logging.basicConfig(level=logging.DEBUG)
StateManager 提供了一个轻量级、高性能的状态管理解决方案,完全替代了 Redis 的功能。它特别适合 QGIS 处理算法的使用场景,提供了简单易用的 API 和可靠的性能表现。