-
Notifications
You must be signed in to change notification settings - Fork 0
/
redis.go
149 lines (120 loc) · 2.54 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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package gredis
import (
"encoding/json"
"gorobbs/package/setting"
"time"
"github.com/gomodule/redigo/redis"
)
var RedisConn *redis.Pool
func init() {
Setup()
}
// Setup Initialize the Redis instance
func Setup() error {
RedisConn = &redis.Pool{
MaxIdle: setting.RedisSetting.RedisMaxidle,
MaxActive: setting.RedisSetting.RedisMaxActive,
IdleTimeout: setting.RedisSetting.RedisIdleTimeout,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", setting.RedisSetting.RedisHost, redis.DialDatabase(0))
if err != nil {
return nil, err
}
if setting.RedisSetting.RedisPassword != "" {
if _, err := c.Do("AUTH", setting.RedisSetting.RedisPassword); err != nil {
c.Close()
return nil, err
}
}
return c, err
},
TestOnBorrow: func(c redis.Conn, t time.Time) error {
_, err := c.Do("PING")
return err
},
}
return nil
}
// Set a key/value
func Set(key string, data interface{}, time int) error {
conn := RedisConn.Get()
defer conn.Close()
value, err := json.Marshal(data)
if err != nil {
return err
}
_, err = conn.Do("SET", key, value)
if err != nil {
return err
}
_, err = conn.Do("EXPIRE", key, time)
if err != nil {
return err
}
return nil
}
// Exists check a key
func Exists(key string) bool {
conn := RedisConn.Get()
defer conn.Close()
exists, err := redis.Bool(conn.Do("EXISTS", key))
if err != nil {
return false
}
return exists
}
// Get get a key
func Get(key string) ([]byte, error) {
conn := RedisConn.Get()
defer conn.Close()
reply, err := redis.Bytes(conn.Do("GET", key))
if err != nil {
return nil, err
}
return reply, nil
}
// Delete delete a kye
func Delete(key string) (bool, error) {
conn := RedisConn.Get()
defer conn.Close()
return redis.Bool(conn.Do("DEL", key))
}
// LikeDeletes batch delete
func LikeDeletes(key string) error {
conn := RedisConn.Get()
defer conn.Close()
keys, err := redis.Strings(conn.Do("KEYS", "*"+key+"*"))
if err != nil {
return err
}
for _, key := range keys {
_, err = Delete(key)
if err != nil {
return err
}
}
return nil
}
func Lpush(key string, value interface{}, time int) error {
conn := RedisConn.Get()
defer conn.Close()
_, err := conn.Do("LPUSH", key, value)
if err != nil {
return err
}
/*
_, err = conn.Do("EXPIRE", key, time)
if err != nil {
return err
}*/
return nil
}
func Brpop(key string) (string, error) {
conn := RedisConn.Get()
defer conn.Close()
reply, err := redis.String(conn.Do("RPOP", key))
if err != nil {
return reply, err
}
return reply, nil
}