mirror of
https://github.com/feigeCode/navop.git
synced 2026-11-06 08:07:31 +00:00
SCAN 的返回值原先按 `(u64, Vec<String>)` 解析,redis-rs 会对每个 bulk string 做严格 UTF-8 校验;只要库里存在一个 JDK 原生序列化对象之类的二进制键,整批 回复就变成 `Cannot convert from UTF-8`,列表加载直接报错(issue #485)。 改为在 redis-runtime 引入二进制安全的键编解码: - 新增 `key_codec`:`encode` 把服务端键字节转成可显示、可还原的字符串 (可打印 UTF-8 键原样,其余为 `U+0001` 前缀 + 逐字节 `\xNN` 转义); `decode` 在真正下发命令前还原原始字节,普通键恒等借用、零分配。 - SCAN / KEYS 回复改按 `Vec<Vec<u8>>` 解析,逐键 `encode` 后进入树与列表。 - 所有下发键的命令(TYPE/TTL/GET/SET/DEL/EXPIRE/PERSIST/RENAME/HSCAN/SSCAN/ LRANGE/ZRANGE/XRANGE 等)在 trait 边界 `decode`,因此列表显示形态可以原样 回传到读取、改 TTL、重命名、删除等入口。 - `key_value_view` 等 UI 侧无需改动,`KeyInfo.name` 保持显示形态与树一致。 测试:新增 key_codec 单元测试,以及 SCAN 回复解析回归测试与二进制键 「扫描 → 读取 → 删除」端到端测试(本机 127.0.0.1:6379 上实测通过)。