Files
apiServer-service/utils/redis_tools/redis_tools.go
T
shiran 6050d11f27 feat: 添加微服务模板基础架构
- 创建基于 CloudWego Hertz 的 Go 微服务脚手架
- 集成 Nacos 服务注册/发现功能
- 添加 gRPC 客户端支持
- 实现环境变量配置管理 (.env.example)
- 添加 HTTP 中间件 (Recovery, AccessLog, CORS)
- 配置 Gitea CI/CD 构建部署流程

BREAKING CHANGE: 项目结构调整,从简单的 API 服务升级为完整的微服务架构
2026-04-15 11:13:38 +08:00

96 lines
2.0 KiB
Go

package redis_tools
import (
"apiServer_service/utils/logger"
"context"
"os"
"sync"
"time"
"github.com/go-redis/redis/v8"
)
var (
client *redis.Client
once sync.Once
)
func ConnectRedis() *redis.Client {
once.Do(func() {
addr := os.Getenv("REDIS_HOST")
if addr == "" {
addr = "127.0.0.1:6379"
}
password := os.Getenv("REDIS_PASSWORD")
client = redis.NewClient(&redis.Options{
Addr: addr,
Password: password,
DB: 0,
PoolSize: 20,
MinIdleConns: 5,
DialTimeout: 5 * time.Second,
ReadTimeout: 3 * time.Second,
WriteTimeout: 3 * time.Second,
})
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := client.Ping(ctx).Err(); err != nil {
logger.Warn("Redis", "连接失败: ", err)
return
}
logger.Info("Redis", "连接成功")
})
return client
}
func GetClient() *redis.Client {
return ConnectRedis()
}
func Close() error {
if client != nil {
return client.Close()
}
return nil
}
// ---- List 操作 ----
func AddToList(key string, value interface{}) error {
return GetClient().LPush(context.Background(), key, value).Err()
}
func GetListRange(key string, start, stop int64) ([]string, error) {
return GetClient().LRange(context.Background(), key, start, stop).Result()
}
func GetAllFromList(key string) ([]string, error) {
return GetListRange(key, 0, -1)
}
func RemoveFromList(key string, value interface{}) error {
return GetClient().LRem(context.Background(), key, 0, value).Err()
}
// ---- KV 缓存操作 ----
func SetCache(key string, value interface{}, expiration time.Duration) error {
return GetClient().Set(context.Background(), key, value, expiration).Err()
}
func GetCache(key string) (string, error) {
return GetClient().Get(context.Background(), key).Result()
}
func Exists(key string) bool {
n, err := GetClient().Exists(context.Background(), key).Result()
return err == nil && n > 0
}
func Del(keys ...string) error {
return GetClient().Del(context.Background(), keys...).Err()
}