1 Star 0 Fork 0

linxing/youye-core

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
option_redis.go 2.31 KB
一键复制 编辑 原始数据 按行查看 历史
Mark 提交于 2023-12-23 11:58 . init
package config
import (
"context"
"crypto/tls"
"crypto/x509"
"fmt"
"io/ioutil"
"github.com/go-redis/redis/v9"
)
var _redis *redis.Client
// GetRedisClient 获取redis客户端
func GetRedisClient() *redis.Client {
return _redis
}
// SetRedisClient 设置redis客户端
func SetRedisClient(c *redis.Client) {
if _redis != nil && _redis != c {
_redis.Shutdown(context.TODO())
}
_redis = c
}
type RedisConnectOptions struct {
Network string `yaml:"network" json:"network"`
Addr string `yaml:"addr" json:"addr"`
Username string `yaml:"username" json:"username"`
Password string `yaml:"password" json:"password"`
DB int `yaml:"db" json:"db"`
PoolSize int `yaml:"pool_size" json:"pool_size"`
Tls *Tls `yaml:"tls" json:"tls"`
MaxRetries int `yaml:"max_retries" json:"max_retries"`
}
type Tls struct {
Cert string `yaml:"cert" json:"cert"`
Key string `yaml:"key" json:"key"`
Ca string `yaml:"ca" json:"ca"`
}
func (e RedisConnectOptions) GetRedisOptions() (*redis.Options, error) {
r := &redis.Options{
Network: e.Network,
Addr: e.Addr,
Username: e.Username,
Password: e.Password,
DB: e.DB,
MaxRetries: e.MaxRetries,
PoolSize: e.PoolSize,
}
var err error
r.TLSConfig, err = getTLS(e.Tls)
return r, err
}
func getTLS(c *Tls) (*tls.Config, error) {
if c != nil && c.Cert != "" {
// 从证书相关文件中读取和解析信息,得到证书公钥、密钥对
cert, err := tls.LoadX509KeyPair(c.Cert, c.Key)
if err != nil {
fmt.Printf("tls.LoadX509KeyPair err: %v\n", err)
return nil, err
}
// 创建一个新的、空的 CertPool,并尝试解析 PEM 编码的证书,解析成功会将其加到 CertPool 中
certPool := x509.NewCertPool()
ca, err := ioutil.ReadFile(c.Ca)
if err != nil {
fmt.Printf("ioutil.ReadFile err: %v\n", err)
return nil, err
}
if ok := certPool.AppendCertsFromPEM(ca); !ok {
fmt.Println("certPool.AppendCertsFromPEM err")
return nil, err
}
return &tls.Config{
// 设置证书链,允许包含一个或多个
Certificates: []tls.Certificate{cert},
// 要求必须校验客户端的证书
ClientAuth: tls.RequireAndVerifyClientCert,
// 设置根证书的集合,校验方式使用 ClientAuth 中设定的模式
ClientCAs: certPool,
}, nil
}
return nil, nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/linxing_3/youye-core.git
git@gitee.com:linxing_3/youye-core.git
linxing_3
youye-core
youye-core
v0.0.1-202405061542

搜索帮助