redis/CHANGELOG.md
AI Engineer d6335d0d41 fix(redis): Result.Bool() 增加 OK 判断,SafeMode 改为仅拦截危险命令,修复 JS Logger 注入(by AI)
Co-Authored-By: deepseek-v4-pro[1m] <deepseek-ai@claude-code-best.win>
2026-06-21 20:31:07 +08:00

6.7 KiB
Raw Permalink Blame History

CHANGELOG - redis

v1.5.8 (2026-06-21)

  • 安全模式优化: checkSafe 从写命令全量拦截改为仅拦截危险命令(FLUSHDB/FLUSHALL常规写操作HSET/HDEL/SET/DEL 等)在安全模式下不再受限。
  • Result.Bool() 修复: 增加 "OK" 响应判断Redis RESP Simple String解决 SET/SETEX 等命令永远返回 false 的问题。
  • JS Logger 注入修复: getDefaultRedisForJS 改用 jsmod.Get(ctx, "Logger") 替代 ctx.Value("Logger"),修复 jsmod Context 下 Logger 始终为 nil 导致的 panic。

v1.5.7 (2026-06-21)

  • 兼容性增强: 对已废弃的 Redis 命令增加新协议兼容支持。
    • SETEXSET key val EX secSETNXSET key val NXHMSETHSETGETSETSET key val GETZREVRANGEZRANGE ... REV
    • 新增 compatFlags 降级标记位,默认尝试新协议;当新协议报错时自动回退旧协议并记录标记,后续直接使用旧协议。
  • 依赖更新: 升级 shellv1.5.4

v1.5.6 (2026-06-21)

  • JS 对齐: 重构 JS 导出为具名函数,并引入 jsmod.MakeError 动态包装错误以获取调用栈。
  • 依赖更新: 升级依赖 jsmodv1.5.3castv1.5.3randv1.5.3encodingv1.5.4shellv1.5.3safev1.5.2idv1.5.4cryptov1.5.3filev1.5.5configv1.5.3logv1.5.8

v1.5.5 (2026-06-20)

  • JS 导出重构:
    • 移除 js_export.go 中冗余的独立命令快捷函数SET, GET, DEL, EXISTS, EXPIRE, PUBLISH统一通过 Do 方法调用。
    • 移除未使用的 PascalCase 实例方法SET, GET, DEL, EXISTS, EXPIRE, HSET, HGET, PUBLISH精简 API 面积。
    • 新增 getDefaultRedisForJS 单例模式,从 Context 中提取 log.Logger 传入 GetRedis,确保 JS 端 Redis 操作具备完整日志追踪能力。
    • 新增 MakeID 函数,为 JS 端暴露分布式 ID 生成能力。

v1.5.4 (2026-06-19)

  • 基础设施对齐: 内部依赖统一升级至 v1.5.x 语义版本。

v1.5.3 (2026-06-18)

  • JS 导出增强: 对齐 PascalCase 命名规范,扁平化 default 实例的 JS 导出。

v1.5.2 (2026-06-17)

  • 依赖修复: 对齐 encoding v1.5.2 接口变更。

v1.5.1 (2026-06-08)

  • 新增: SetConfig(name, setting string) 方法,支持动态配置 Redis 连接(不依赖配置文件),方便通过别名获取连接。
  • 优化: 重构配置加载逻辑,确保动态配置与配置文件配置的共存与优先级。

v1.3.3 (2026-05-30)

  • 新增: 注册到 jsmod
  • 安全性: 引入基于 Context 的细粒度权限控制。在 SafeMode仅允许读取操作GET/EXISTS/ZRANGE等所有写操作SET/DEL/EXPIRE/DO等将被拦截并返回错误。

v1.0.8 (2026-05-10)

  • API 对齐:
    • NewIDMaker 返回值从 *IDMaker 修改为 *id.IDMaker,保持全局接口统一。
    • 移除了 redis.IDMaker 冗余的包装方法,直接使用 id.IDMaker 的实现。

v1.0.7 (2026-05-09)

  • 基础设施对齐:
    • 升级 apigo.cc/go/logv1.1.13
    • redis 包不涉及自定义日志类型,本次升级无代码变更。

v1.0.6 (2026-05-07)

  • Security & Compatibility:
    • 增强 Redis 密码解密逻辑,支持 URL-safe Base64 编码的加密密码,提升多平台配置兼容性。
  • Maintenance:
    • 升级依赖 apigo.cc/go/cast (v1.2.8) 与 apigo.cc/go/log (v1.1.9)。
    • 依赖 apigo.cc/go/encoding (v1.0.5) 正式转为显式引用。

v1.0.5 (2026-05-06)

  • Maintenance:
    • 内部依赖对齐与升级 (config, crypto, id, safe 等至 v1.0.5/v1.0.6)。
    • 移除了冗余的 replace 指令,清理 go.sum

v1.0.4 (2026-05-06)

  • Maintenance:
    • 添加 .gitignore 以排除日志元数据。
    • 升级 apigo.cc/go/log 至 v1.1.3。

v1.0.3 (2026-05-05)

  • PubSub Robustness:
    • 重构 Redis 结构体,引入 pubsub 内部结构 management 共享状态。
    • 修复了 CopyByLogger 场景下 subs map 与 subLock 不匹配导致的并发竞争风险。
    • 优化 Start() 方法,增加运行状态检查,防止冗余的订阅协程启动。
    • 增强 Stop() 方法的生命周期管理,确保协程安全退出并清理停止通道。

v1.0.2 (2026-05-04)

  • Naming Standardization:
    • 全面将 Id 命名规范化为 ID(涉及 IDMaker, NewIDMaker, userInfo.ID 等)。
  • Performance & Efficiency:
    • 优化 commands.go: 所有 Redis 命令调用改为参数化传递,消除字符串拼接,提升解析性能并防止 Key 包含空格的问题。
    • 优化 redis.go: 在 do 方法中增加判断,若命令不含空格则跳过 Split 处理,减少内存分配。
  • Modernity & Robustness:
    • 升级错误处理逻辑,使用 errors.Aserrors.Is 替换旧式的类型断言。
    • 增强 Result.To 方法,增加对目标对象非空指针的强制校验。
    • 完善 do 方法对 valuesnil 指针检查。
  • Cleanup:
    • 删除了冗余的 AI.md 文件。
  • Testing:
    • 新增 TestRetry 用例,验证连接异常时的自动恢复逻辑。

v1.0.1 (2026-05-03)

  • Security & Stability:
    • 修复了 Pub/Sub 模块中 subs map 和 subConn 的并发访问竞争风险Race Condition引入 subLock 互斥锁。
  • Cleanup:
    • 移除了 Redis 结构体中冗余的 ReadTimeout 字段,统一由 Config 管理。
  • Testing & CI/CD:
    • 新增 TestMain 自动环境检查,若 Redis 不可用则优雅跳过测试,不中断 CI 流程。
    • 新增 TestIdMaker 覆盖分布式 ID 生成逻辑。
    • 新增 bench_test.go,建立性能基准测试。
    • 新增 TEST.md 记录测试覆盖场景与 Benchmark 结果。

v1.0.0 (2026-05-03)

  • Repo Migration: 从 @ssgo/redis 迁移至 apigo.cc/go/redis
  • Standard Realignment:
    • 依赖全面切换至 apigo.cc/go/* 标准库。
    • 适配 Go 1.25.0。
  • Feature Enhancements:
    • Generics: 为 Result 引入泛型 To[T] 支持,消除类型断言摩擦。
    • Memory Safety: 集成 go/safe 对 Redis 密码进行实时加解密与内存锁定,防止内存泄漏敏感信息。
    • Auto-Serialization: 优化了 Do 方法,支持对 Struct/Map/Slice 自动进行 JSON 序列化(优先支持 Marshaler 接口)。
    • Distributed ID: 深度集成 go/id 核心,提供更高性能的 Redis 序列号预取机制。
  • Refactoring:
    • 移除了冗余的 interface{},全面改用 any
    • 规范化了 API 命名,统一使用 GetUpperName 进行 Struct 字段映射。
    • 增强了连接重试机制,支持对网络波动和服务器重启的自动恢复。