2026-05-03 08:43:23 +08:00
|
|
|
# Redis 模块 (redis)
|
2026-05-03 08:36:58 +08:00
|
|
|
|
2026-05-03 08:43:23 +08:00
|
|
|
`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)
|
|
|
|
|
```
|