-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathclient.go
More file actions
68 lines (61 loc) · 2.14 KB
/
Copy pathclient.go
File metadata and controls
68 lines (61 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package rediswrap
import (
"context"
"fmt"
"strings"
"github.com/DataWorkbench/common/gtrace"
"github.com/go-redis/redis/v8"
)
const (
StandaloneMode = "standalone"
SentinelMode = "sentinel"
ClusterMode = "cluster"
)
type Client interface {
redis.Cmdable
AddHook(hook redis.Hook)
Close() error
}
type RedisConfig struct {
// Optional Value: "standalone/sentinel/cluster".
Mode string `json:"mode" yaml:"mode" env:"MODE" validate:"required"`
MasterName string `json:"master_name" yaml:"master_name" env:"MASTER_NAME"`
// eg: "127.0.0.1:6379".
StandaloneAddr string `json:"standalone_addr" yaml:"standalone_addr" env:"STANDALONE_ADDR"`
// eg: "127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381"
ClusterAddr string `json:"cluster_addr" yaml:"cluster_addr" env:"CLUSTER_ADDR"`
// eg: "127.0.0.1:7000,127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003,127.0.0.1:7004,127.0.0.1:7005".
SentinelAddr string `json:"sentinel_addr" yaml:"sentinel_addr" env:"SENTINEL_ADDR"`
UserName string `json:"user_name" yaml:"user_name" env:"UER_NAME"`
Password string `json:"password" yaml:"password" env:"PASSWORD"`
Database int `json:"database" yaml:"database" env:"DATABASE"`
}
func NewRedisConn(ctx context.Context, cfg *RedisConfig) (Client, error) {
var rdb Client
switch cfg.Mode {
case StandaloneMode:
rdb = redis.NewClient(&redis.Options{
Addr: cfg.StandaloneAddr,
Username: cfg.UserName,
Password: cfg.Password,
})
case SentinelMode:
rdb = redis.NewFailoverClusterClient(&redis.FailoverOptions{
MasterName: cfg.MasterName,
Username: cfg.UserName,
SentinelAddrs: strings.Split(cfg.SentinelAddr, ","),
Password: cfg.Password,
DB: cfg.Database,
})
case ClusterMode:
rdb = redis.NewClusterClient(&redis.ClusterOptions{
Addrs: strings.Split(cfg.ClusterAddr, ","),
Username: cfg.UserName,
Password: cfg.Password,
})
default:
return nil, fmt.Errorf("unsupported mode: %s", cfg.Mode)
}
rdb.AddHook(&hookTrace{tracer: gtrace.TracerFromContext(ctx)})
return rdb, nil
}