redis/README.md

2.1 KiB

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。

示例

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)