cluster -> single

This commit is contained in:
白茶清欢 2024-06-20 18:38:23 +08:00
parent f11c0a8216
commit e8b63fb863
3 changed files with 16 additions and 33 deletions

View File

@ -21,9 +21,9 @@ import (
// //
// Date : 15:09 2024/6/18 // Date : 15:09 2024/6/18
type IRedisClient interface { type IRedisClient interface {
GetRealClient(instanceFlag string) *redis.ClusterClient // 获取客户端连接 GetRealClient(instanceFlag string) *redis.Client // 获取客户端连接
GetRealClientWithError(instanceFlag string) (*redis.ClusterClient, error) // 获取带error的客户端连接 GetRealClientWithError(instanceFlag string) (*redis.Client, error) // 获取带error的客户端连接
AddClient(instanceFlag string, instanceConfig *define.ClusterOptions) error // 添加新的客户端连接 AddClient(instanceFlag string, instanceConfig *define.Options) error // 添加新的客户端连接
RemoveClient(instanceFlag string) // 移除一个客户端连接 RemoveClient(instanceFlag string) // 移除一个客户端连接
SetLogger(loggerInstance *zap.Logger) // 设置日志实例, 全局生效, 而非针对某一个实例 SetLogger(loggerInstance *zap.Logger) // 设置日志实例, 全局生效, 而非针对某一个实例
Exec(ctx context.Context, instanceFlag string, command string, args ...any) *define.RedisResult // 执行任意命令 Exec(ctx context.Context, instanceFlag string, command string, args ...any) *define.RedisResult // 执行任意命令

View File

@ -28,14 +28,14 @@ var (
func init() { func init() {
Client = &OwnClient{ Client = &OwnClient{
lock: &sync.RWMutex{}, lock: &sync.RWMutex{},
instanceTable: make(map[string]*redisClient.ClusterClient), instanceTable: make(map[string]*redisClient.Client),
whiteCommandTable: make(map[string]bool), whiteCommandTable: make(map[string]bool),
} }
} }
type OwnClient struct { type OwnClient struct {
lock *sync.RWMutex lock *sync.RWMutex
instanceTable map[string]*redisClient.ClusterClient instanceTable map[string]*redisClient.Client
whiteCommandTable map[string]bool whiteCommandTable map[string]bool
logger *zap.Logger logger *zap.Logger
} }
@ -62,7 +62,7 @@ func (o *OwnClient) isAllowCommand(command string) bool {
// Date : 11:05 2024/6/19 // Date : 11:05 2024/6/19
func (o *OwnClient) Exec(ctx context.Context, instanceFlag string, command string, args ...any) *define.RedisResult { func (o *OwnClient) Exec(ctx context.Context, instanceFlag string, command string, args ...any) *define.RedisResult {
var ( var (
instance *redisClient.ClusterClient instance *redisClient.Client
) )
cmdParamList := []any{ cmdParamList := []any{
@ -127,13 +127,13 @@ func (o *OwnClient) SetCommandWhiteList(commandList []string) {
} }
} }
func (o *OwnClient) GetRealClient(instanceFlag string) *redisClient.ClusterClient { func (o *OwnClient) GetRealClient(instanceFlag string) *redisClient.Client {
o.lock.RLock() o.lock.RLock()
defer o.lock.RUnlock() defer o.lock.RUnlock()
return o.instanceTable[instanceFlag] return o.instanceTable[instanceFlag]
} }
func (o *OwnClient) GetRealClientWithError(instanceFlag string) (*redisClient.ClusterClient, error) { func (o *OwnClient) GetRealClientWithError(instanceFlag string) (*redisClient.Client, error) {
o.lock.RLock() o.lock.RLock()
defer o.lock.RUnlock() defer o.lock.RUnlock()
instance, exist := o.instanceTable[instanceFlag] instance, exist := o.instanceTable[instanceFlag]
@ -143,16 +143,10 @@ func (o *OwnClient) GetRealClientWithError(instanceFlag string) (*redisClient.Cl
return instance, nil return instance, nil
} }
func (o *OwnClient) AddClient(instanceFlag string, instanceConfig *define.ClusterOptions) error { func (o *OwnClient) AddClient(instanceFlag string, instanceConfig *define.Options) error {
instance := redisClient.NewClusterClient(&redisClient.ClusterOptions{ instance := redisClient.NewClient(&redisClient.Options{
Addrs: instanceConfig.Addrs, Addr: instanceConfig.Addr,
// ClientName: instanceConfig.ClientName, ClientName: instanceConfig.ClientName,
NewClient: nil,
MaxRedirects: instanceConfig.MaxRedirects,
ReadOnly: instanceConfig.ReadOnly,
RouteByLatency: instanceConfig.RouteByLatency,
RouteRandomly: instanceConfig.RouteRandomly,
ClusterSlots: nil,
Dialer: nil, Dialer: nil,
OnConnect: func(ctx context.Context, cn *redisClient.Conn) error { OnConnect: func(ctx context.Context, cn *redisClient.Conn) error {
return nil return nil

View File

@ -7,23 +7,12 @@
// Date : 2024-06-18 16:12 // Date : 2024-06-18 16:12
package define package define
type ClusterOptions struct { type Options struct {
Network string `json:"network" yaml:"network" ini:"network" toml:"network"` // 网络连接方式
// A seed list of host:port addresses of cluster nodes. // A seed list of host:port addresses of cluster nodes.
Addrs []string `json:"addrs" yaml:"addrs" ini:"addrs" toml:"addrs"` // 集群IP列表 Addr string `json:"addr" yaml:"addr" ini:"addr" toml:"addr"` // 集群IP列表
// ClientName will execute the `CLIENT SETNAME ClientName` command for each conn. // ClientName will execute the `CLIENT SETNAME ClientName` command for each conn.
ClientName string `json:"client_name" yaml:"client_name" ini:"client_name" toml:"client_name"` // 集群名称 ClientName string `json:"client_name" yaml:"client_name" ini:"client_name" toml:"client_name"` // 集群名称
// The maximum number of retries before giving up. Command is retried
// on network errors and MOVED/ASK redirects.
// Default is 3 retries.
MaxRedirects int `json:"max_redirects" yaml:"max_redirects" ini:"max_redirects" toml:"max_redirects"` // 最大重试次数
// Enables read-only commands on slave nodes.
ReadOnly bool `json:"read_only" yaml:"read_only" ini:"read_only" toml:"read_only"` // 只读
// Allows routing read-only commands to the closest master or slave node.
// It automatically enables ReadOnly.
RouteByLatency bool `json:"route_by_latency" yaml:"route_by_latency" ini:"route_by_latency" toml:"route_by_latency"`
// Allows routing read-only commands to the random master or slave node.
// It automatically enables ReadOnly.
RouteRandomly bool `json:"route_randomly" yaml:"route_randomly" ini:"route_randomly" toml:"route_randomly"`
Protocol int Protocol int
Username string `json:"username" yaml:"username" ini:"username" toml:"username"` Username string `json:"username" yaml:"username" ini:"username" toml:"username"`