-
Notifications
You must be signed in to change notification settings - Fork 0
/
redis.go
85 lines (74 loc) · 2.21 KB
/
redis.go
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
* Tencent is pleased to support the open source community by making 蓝鲸 available.
* Copyright (C) 2017-2018 THL A29 Limited, a Tencent company. All rights reserved.
* Licensed under the MIT License (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
* http://opensource.org/licenses/MIT
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language governing permissions and
* limitations under the License.
*/
package redis
import (
"strconv"
"strings"
redis "gopkg.in/redis.v5"
)
// Config define redis config
type Config struct {
Address string
Port string
Password string
Database string
MasterName string
}
// ParseConfigFromKV returns new config
func ParseConfigFromKV(prefix string, conifgmap map[string]string) Config {
return Config{
Address: conifgmap[prefix+".host"],
Port: conifgmap[prefix+".port"],
Password: conifgmap[prefix+".pwd"],
Database: conifgmap[prefix+".database"],
MasterName: conifgmap[prefix+".mastername"],
}
}
// NewFromConfig returns new redis client from config
func NewFromConfig(cfg Config) (*redis.Client, error) {
dbNum, err := strconv.Atoi(cfg.Database)
if nil != err {
return nil, err
}
if !strings.Contains(cfg.Address, ":") && len(cfg.Port) > 0 {
cfg.Address = cfg.Address + ":" + cfg.Port
}
var client *redis.Client
if cfg.MasterName == "" {
option := &redis.Options{
Addr: cfg.Address,
Password: cfg.Password,
DB: dbNum,
PoolSize: 100,
}
client = redis.NewClient(option)
} else {
hosts := strings.Split(cfg.Address, ",")
option := &redis.FailoverOptions{
MasterName: cfg.MasterName,
SentinelAddrs: hosts,
Password: cfg.Password,
DB: dbNum,
PoolSize: 100,
}
client = redis.NewFailoverClient(option)
}
err = client.Ping().Err()
if err != nil {
return nil, err
}
return client, err
}
// IsNilErr returns whether err is nil error
func IsNilErr(err error) bool {
return redis.Nil == err
}