# Redis 模块 (redis) `redis` 模块提供了一个高性能、内存安全且易于使用的 Redis 客户端,集成了分布式 ID 生成和发布订阅功能。 ## 设计特性 - **消除摩擦**: 自动处理连接池、重试、以及复杂类型的 JSON 序列化。 - **内存安全**: 对 Redis 密码进行内存保护,防止内存 Dump 泄露敏感信息。 - **泛型支持**: 结果集支持泛型绑定 `To[T]`。 - **分布式 ID**: 内置基于 Redis 的高性能分布式 ID 生成器。 ## API 指南 ### 基础连接 - `GetRedis(name string, logger *log.Logger) *Redis`: 获取或创建一个 Redis 实例(支持 DSN 或配置文件名)。 - `NewRedis(conf *Config, logger *log.Logger) *Redis`: 使用指定配置创建 Redis 实例。 ### 核心操作 - `Do(cmd string, values ...any) *Result`: 执行原生 Redis 命令。 - 支持大部分标准命令:`GET`, `SET`, `HGET`, `HSET`, `LPUSH`, `LPOP`, `SADD`, `ZRANGE`, `PUBLISH` 等。 ### 结果处理 (Result) - `Int()`, `String()`, `Bool()`, `Float()`: 基础类型转换。 - `To(target any)`: 将结果反序列化到结构体或 Map。 - `To[T](rs *Result) T`: **泛型版本**,直接返回目标类型对象。 - `Ints()`, `Strings()`, `Results()`: 处理数组结果。 - `ResultMap()`: 处理 Hash 或键值对结果。 ### 发布订阅 - `Start()`: 开启订阅监听协程。 - `Subscribe(channel string, reset func(), received func([]byte))`: 订阅频道。 - `Unsubscribe(channel string)`: 取消订阅。 - `Stop()`: 停止所有订阅。 ### 分布式 ID (IdMaker) - `NewIdMaker(rd *Redis) *IdMaker`: 创建分布式 ID 生成器。 - `Get(size int)`: 获取指定长度的唯一 ID。 - `GetForMysql(size int)`: 获取针对 MySQL 优化的唯一 ID。 ## 示例 ```go import "apigo.cc/go/redis" // 获取实例 (自动从 redis.json 加载) rd := redis.GetRedis("test", nil) // 设置结构体 (自动 JSON 序列化) rd.SET("user:1", User{Name: "Sam", Age: 18}) // 获取并自动绑定 (泛型) user := redis.To[User](rd.GET("user:1")) // 分布式 ID maker := redis.NewIdMaker(rd) id := maker.Get(10) ```