44 lines
931 B
Go
44 lines
931 B
Go
package redis
|
||
|
||
import (
|
||
"context"
|
||
"log"
|
||
|
||
"github.com/redis/go-redis/v9"
|
||
)
|
||
|
||
var client *redis.Client
|
||
|
||
// Init 初始化 Redis 客户端,url 为空或 "disable" 时跳过
|
||
func Init(url string) error {
|
||
if url == "" || url == "disable" {
|
||
return nil
|
||
}
|
||
opt, err := redis.ParseURL(url)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
client = redis.NewClient(opt)
|
||
ctx := context.Background()
|
||
if err := client.Ping(ctx).Err(); err != nil {
|
||
client = nil // 连接失败时清空,避免后续使用超时;cache 将自动降级到内存备用
|
||
log.Printf("redis: 连接失败,已降级到内存缓存(%v)", err)
|
||
return err
|
||
}
|
||
log.Printf("redis: connected to %s", opt.Addr)
|
||
return nil
|
||
}
|
||
|
||
// Client 返回 Redis 客户端,未初始化时返回 nil
|
||
func Client() *redis.Client {
|
||
return client
|
||
}
|
||
|
||
// Close 关闭连接(优雅退出时调用)
|
||
func Close() error {
|
||
if client != nil {
|
||
return client.Close()
|
||
}
|
||
return nil
|
||
}
|