redis/README.md

56 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Redis 模块 (redis)
`redis` 模块提供了一个高性能、内存安全且易于使用的 Redis 客户端,集成了分布式 ID 生成和发布订阅功能。
## 设计特性
- **消除摩擦**: 自动处理连接池、重试、以及复杂类型的 JSON 序列化。
- **内存安全**: 对 Redis 密码进行内存保护,防止内存 Dump 泄露敏感信息。
- **泛型支持**: 结果集支持泛型绑定 `To[T]`
- **分布式 ID**: 内置基于 Redis 的高性能分布式 ID 生成器。
## API 指南
### 基础连接
- `SetConfig(name, setting string)`: 动态设置 Redis 配置(不依赖配置文件),可通过别名获取连接。
- `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) *id.IDMaker`: 创建基于 Redis 的分布式 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)
```