redis/README.md

57 lines
2.1 KiB
Markdown
Raw Permalink Normal View History

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