HASH 操作
说明
这一页整理脚本里操作 HASH 容器时最常用的能力。
如果你的需求是做快速键值读写、运行时缓存、静态表加载或需要把一组数据长期保存在内存里并按需落盘,可以先从这里开始。
HASH 适合处理什么
HASH 更适合处理下面这类数据:
- 键和值一一对应的快速查表数据
- 运行时缓存、限时状态和临时标记
- 需要按键频繁读取而不想走文件 IO 的数据
- 需要在内存里维护,并按需保存或后台自动落盘的数据
如果当前数据本身是多层对象或数组结构,通常更适合优先看 JSON;如果当前需求主要是直接维护 ini 文件,通常更适合看 INI。
HASH 命令一览
本页中的 Hash-Set、Hash-Get、Hash-SetE 等名称用于速查;实际脚本里通常写成 HASH <标识> Set/Get/SetE ... 这类格式。
如果你只是来查某个命令的单页参数,可以直接看 HASH 命令分组。
读取与判断
这组命令更适合处理“键在不在”“值是多少”“当前容器有没有被改动”这类读取和判断场景。
| 命令 | 最小格式 | 一句话用途 |
|---|---|---|
HashExists | <标识> <KEY> | 判断某个键是否存在 |
Hash-Get | <标识> Get <KEY> <变量> | 把指定键的值读到变量 |
HashModified | <标识> | 判断当前 HASH 是否已被修改 |
<$HASH(...)> | <$HASH(标识)键名> / <$HASH(标识)Size> | 直接按键读取值,或获取当前容器中的键数量 |
什么时候判断存在、读取变量、直接取值或检查改动
这几种能力经常一起出现,但职责不同:
| 场景 | 优先能力 | 原因 |
|---|---|---|
| 先判断键在不在 | HashExists | 适合写在 #IF 判断里,先确认某个键是否存在 |
| 需要把值读到变量里再继续处理 | Hash-Get | 适合后续做消息显示、比较或计算 |
| 只是在字符串、消息或标签里直接取值 | <$HASH(...)> | 不需要先把结果写进变量 |
| 保存前先判断容器是否改动 | HashModified | 适合在手动保存或阶段性落盘前先做判断 |
如果只是先判断有没有这个键,用 HashExists;如果后面还要继续参与比较、拼接或计算,用 Hash-Get;如果只是直接显示结果,用 <$HASH(...)> 往往更省事;如果你的目标是避免重复保存,优先先用 HashModified。
HashExists
#IF
HashExists 活动状态 报名开关
#ACT
SendMsg 5 "报名已经开启。"
Hash-Get
#ACT
HASH 活动状态 Get 报名开关 S10
SendMsg 5 "当前开关:<$STR(S10)>"
HashModified
#IF
HashModified 活动状态
#ACT
HASH 活动状态 Save ..\QuestDiary\活动状态.txt
这类写法适合在保存前先判断当前 HASH 是否真的发生了改动,避免每次流程执行时都重复落盘。
如果你需要判断某个键不存在时再继续执行,也可以在 #IF 里直接写 !HashExists <标识> <KEY>。
写入与维护
这组命令适合写值、改值、删键和清空容器。
| 命令 | 最小格式 | 一句话用途 |
|---|---|---|
Hash-Set | <标识> Set <KEY> <值> | 向 HASH 写入一个键和值 |
Hash-Inc | <标识> Inc <KEY> <数值> | 对整数值做增加 |
Hash-Dec | <标识> Dec <KEY> <数值> | 对整数值做减少 |
Hash-Delete | <标识> Delete <KEY> | 删除指定键 |
Hash-Clear | <标识> Clear | 清空整个 HASH 容器 |
这组命令更适合做缓存更新、状态落点和简单计数维护。如果你只是先判断有没有这个键,仍然应优先用 HashExists,不要把写入命令当成判断命令使用。
<$HASH(...)> 标签怎么用
当前文档只收录已验证且常用的两种基础写法:
| 写法 | 用途 |
|---|---|
<$HASH(标识)Size> | 获取当前 HASH 容器中的键数量 |
<$HASH(标识)键名> | 直接按键取值,效果接近 Hash-Get |
例如:
SendMsg 5 "当前键数量:<$HASH(活动状态)Size>"
SendMsg 5 "报名开关:<$HASH(活动状态)报名开关>"
这种写法更适合直接显示结果;如果后续还要继续参与数值计算或条件比较,通常仍建议先读到变量里。
过期与持久化怎么选
HASH 常见的另外两个问题是“键多久失效”和“什么时候落盘”。
| 命令 | 最小格式 | 一句话用途 |
|---|---|---|
Hash-SetE | <标识> SetE <KEY> <秒数> | 给某个键设置有效期 |
Hash-GetE | <标识> GetE <KEY> <变量> | 读取过期状态或剩余秒数 |
Hash-Save | <标识> Save <文件路径> | 在某个时机手动保存当前 HASH |
Hash-Load | <标识> Load <文件路径> | 从现成文件恢复容器 |
Hash-BGSave | <标识> BGSave <文件路径> | 配置后台自动保存,更常见于全局 HASH |
Hash-GetE 的返回值需要单独区分处理:返回 -2 表示键不存在,返回 -1 表示永不过期,返回大于等于 0 的整数时表示剩余过期秒数。
如果你需要明确知道当前容器是否已经改动,可以再配合 HashModified 做保存前判断。
- 蓝海软件工具集 — 正则批量改配置,参数调整事半功倍
