-
Notifications
You must be signed in to change notification settings - Fork 16
/
redis.go
80 lines (68 loc) · 1.52 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
package redis
import (
"errors"
"time"
"github.com/go-eyas/toolkit/log"
"github.com/go-redis/redis"
)
type Config struct {
Cluster bool
Addrs []string
Password string
DB int
Prefix string
}
// redisClientInterface redis 实例拥有的功能
// type redisClientInterface interface {
// redis.Cmdable
// Subscribe(...string) *redis.PubSub
// Close() error
// }
// RedisClient redis client wrapper
type RedisClient struct {
isCluster bool
Namespace string
Client redis.UniversalClient
Prefix string
}
// RedisTTL 默认有效期 24 小时
var RedisTTL = time.Hour * 24
// Redis 暴露的redis封装
// var Redis *RedisClient
// redis 客户端实例
// var Client redis.UniversalClient
// Init 初始化redis
func New(redisConf *Config) (*RedisClient, error) {
r := &RedisClient{}
r.isCluster = redisConf.Cluster
r.Prefix = redisConf.Prefix
if len(redisConf.Addrs) == 0 {
return nil, errors.New("empty addrs")
}
if redisConf.Cluster {
r.Client = redis.NewClusterClient(&redis.ClusterOptions{
Addrs: redisConf.Addrs,
Password: redisConf.Password,
})
} else {
r.Client = redis.NewClient(&redis.Options{
Addr: redisConf.Addrs[0],
Password: redisConf.Password,
DB: redisConf.DB,
})
}
_, err := r.Client.Ping().Result()
if err != nil {
log.Errorf("redis 连接失败, err=%v", err)
return r, err
}
// Redis = r
// Client = r.Client
return r, nil
}
// Close 关闭redis连接
func (r *RedisClient) Close() {
if r != nil && r.Client != nil {
r.Client.Close()
}
}