persistence — 键值存储

插件私有、按 group 与 key 隔离的持久化键值存储。

self.persistence 提供按 groupkey 隔离的键值存储,可用于保存插件的配置或状态。数据以 JSON 序列化的形式持久化保留。

值是任何可 JSON 序列化的类型(字符串、数字、布尔、列表、字典等)。数据作用域限定为插件本身,以 group + key 为键;不同插件之间的数据相互隔离。

方法

方法说明
get(group, key, callback=None)读取指定键的值
set(group, key, value, callback=None)写入键值对
delete(group, key, callback=None)删除指定键
list_groups(callback=None)列出所有存储组
list_keys(group, callback=None)列出指定组中的所有键
clear(group, callback=None)清空指定组的所有键值对

get(group, key, callback=None)

读取指定键的值。

self.persistence.get(
    "my_plugin", "counter", lambda **cb: print(cb.get("value", 0))
)

参数:

  • group (str) — 存储组名
  • key (str) — 键名

回调数据:{"value": 值}

set(group, key, value, callback=None)

写入键值对。

self.persistence.set("my_plugin", "counter", 42)

参数:

  • group (str) — 存储组名
  • key (str) — 键名
  • value (Any) — 值,支持字符串、数字、布尔、列表、字典等 JSON 可序列化类型

delete(group, key, callback=None)

删除指定键。

self.persistence.delete("my_plugin", "counter")

参数:

  • group (str) — 存储组名
  • key (str) — 键名

list_groups(callback=None)

列出所有存储组。

self.persistence.list_groups(lambda **cb: print(cb.get("groups", [])))

回调数据:{"groups": ["group1", "group2"]}

list_keys(group, callback=None)

列出指定组中的所有键。

self.persistence.list_keys(
    "my_plugin", lambda **cb: print(cb.get("keys", []))
)

参数:

  • group (str) — 存储组名

回调数据:{"keys": ["key1", "key2"]}

clear(group, callback=None)

清空指定组的所有键值对。

self.persistence.clear("my_plugin")

参数:

  • group (str) — 存储组名

使用示例

下面示例通过 groupkey 存储并读取一份插件配置。

def on_loaded(**cb):
    config = cb.get("value", {})
    print("已加载配置:", config)

def save_config(config):
    self.persistence.set("my_plugin", "config", config)

def load_config():
    self.persistence.get("my_plugin", "config", on_loaded)

# 保存配置
save_config({"theme": "dark", "count": 3})

# 读取配置
load_config()

存储隔离

每个插件应使用唯一的 group(建议直接使用插件 ID),确保不同插件的数据互不干扰:

# 推荐:使用插件 ID 作为分组
self.persistence.get("my-plugin-id", "key")

# 避免:使用过于通用的分组
self.persistence.get("shared", "key")

在插件被卸载后,其 group 下的数据会被清理,因此不要跨插件共享键值存储。

On this page