跳转至

脚本开发 / 简易存储 DFF.STORE

DFF.STORE 用于持久化小规模 KV 数据,结构为 scope + key -> value。写入时会自动进行 JSON 序列化,读取时自动反序列化并保留 JSON 类型。

复杂查询或大量数据应使用数据库连接器。短生命周期、高频访问且可接受字符串化的数据应使用 DFF.CACHE

通用参数

参数 必须 / 默认值 说明
key 必须 键名,最长 256 个字符
value 必须 JSON 可序列化对象
expires None 过期秒数;None 表示永不过期
scope 当前 Script ID 命名空间,最长 256 个字符
pattern "*" 键名匹配;* 匹配任意长度,? 匹配单个字符

API

方法 返回值 / 说明
set(key, value, expires=None, not_exists=False, scope=None) 写入单个值,返回 None
mset(key_values, expires=None, not_exists=False, scope=None) 批量写入,返回 None
get(key, scope=None) / DFF.STORE(key, scope=None) 返回值;不存在或已过期时返回 None
mget(keys, scope=None) 返回 {key: value}
getall(scope=None) 返回 Scope 下的全部数据
keys(pattern='*', scope=None) 返回匹配的 Key 列表
get_pattern(pattern='*', scope=None) 返回匹配的数据 {key: value}
delete(key, scope=None) 删除指定 Key
delete_pattern(pattern='*', scope=None) 删除匹配的 Key
ref(key, scope=None, default=None) 为支持动态取值的 DFF.API 参数创建延迟引用
示例
1
2
3
4
5
6
7
8
9
DFF.STORE.set('user:user-001', {'name': 'User A'}, scope='users')
user = DFF.STORE.get('user:user-001', scope='users')

DFF.STORE.mset({
    'user:user-002': {'name': 'User B'},
    'user:user-003': {'name': 'User C'},
}, scope='users')

users = DFF.STORE.get_pattern('user:*', scope='users')

mget(...) 会包含每个请求的 Key,缺失或已过期的值为 Noneget_pattern(...) 只包含匹配且仍有效的记录。

使用 not_exists=True 时,刚过期的 Key 仍可能阻止创建。set(...)mset(...) 都返回 None,必须确认创建结果时应在写入后读取。批量写入会逐项执行,不是全有或全无的事务。

缺失或假值 expires 表示不过期;后续不带过期时间的写入会清除原有过期时间。旧代码可能使用 expire 参数,新代码应统一使用 expires

动态引用

DFF.STORE.ref(...) 返回动态引用,可用于 DFF.APIdelayed_cron_jobtimeoutexpiresqueue 参数。省略 scope 时,引用使用专用的 REF Scope,而不是当前 Script Scope;通常应显式传入与写入方一致的 Scope。

模式删除默认会匹配整个 Scope

delete_pattern() 的默认模式是 "*"。除非明确需要删除整个 Scope,否则必须显式传入 pattern,并先通过 keys(...) 查看匹配到的 Key。

不要使用 DFF.STORE 长期保存大文件或大型列表。