FrontInterfaceCenter/internal/data/rds.go

49 lines
1.1 KiB
Go

package data
import (
"center-api/internal/conf"
"fmt"
"github.com/go-kratos/kratos/v2/log"
_ "github.com/go-sql-driver/mysql"
"github.com/redis/go-redis/v9"
)
// Data .
type Data struct {
Rdb *redis.Client
}
// NewData .
func NewData(c *conf.Bootstrap, hLog *log.Helper) (*Data, func(), error) {
//构建 redis
rdb := buildRdb(c)
//退出时清理资源
cleanup := func() {
if rdb != nil {
if err := rdb.Close(); err != nil {
hLog.Error("关闭 redis 失败:", err)
}
}
fmt.Println("关闭 data 中的连接资源已完成")
}
return &Data{Rdb: rdb}, cleanup, nil
}
// buildRdb 构建redis client
func buildRdb(c *conf.Bootstrap) *redis.Client {
if c.Data == nil || c.Data.Redis == nil {
return nil
}
rdb := redis.NewClient(&redis.Options{
Addr: c.Data.Redis.Addr,
Password: c.Data.Redis.Password,
ReadTimeout: c.Data.Redis.ReadTimeout.AsDuration(),
WriteTimeout: c.Data.Redis.WriteTimeout.AsDuration(),
PoolSize: int(c.Data.Redis.PoolSize),
MinIdleConns: int(c.Data.Redis.MinIdleConns),
ConnMaxIdleTime: c.Data.Redis.ConnMaxIdleTime.AsDuration(),
DB: 0,
})
return rdb
}