-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJRedis.go
189 lines (151 loc) · 3.09 KB
/
JRedis.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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
package toolset
import (
"encoding/binary"
"encoding/json"
"strconv"
"time"
"github.com/gomodule/redigo/redis"
)
var redisConn *redis.Pool
// Setup Initialize the Redis instance
func Setup() error {
redisConn = &redis.Pool{
MaxIdle: 30,
MaxActive: 30,
IdleTimeout: 200,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
return nil, err
}
// if setting.RedisSetting.Password != "" {
// if _, err := c.Do("AUTH", setting.RedisSetting.Password); 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
}
func SetKey(key string, value interface{}) error {
conn := redisConn.Get()
defer conn.Close()
value, err := json.Marshal(value)
if err != nil {
return err
}
_, err = conn.Do("SET", key, value)
if err != nil {
return err
}
return nil
}
func Expire(key string, time int) error {
conn := redisConn.Get()
defer conn.Close()
_, 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
}
func BytesToInt64(buf []byte) int64 {
return int64(binary.LittleEndian.Uint64(buf))
}
func BytesToInt(bytesArr []byte) int {
var intNum int
if len(bytesArr) == 1 {
bytesArr = append(bytesArr, byte(0))
intNum = int(binary.LittleEndian.Uint16(bytesArr))
} else if len(bytesArr) == 2 {
intNum = int(binary.LittleEndian.Uint16(bytesArr))
}
return intNum
}
func GetInt(key string) (int64, error) {
v, error := Get(key)
if error == nil {
ival, err1 := strconv.ParseInt(string(v), 10, 64)
if err1 == nil {
return ival, nil
} else {
return 0, err1
}
}
return 0, error
}
func GetString(key string) (string, error) {
v, err := Get(key)
if err == nil {
var sval string
json.Unmarshal(v, &sval)
return sval, err
}
return "", err
}
// 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
}