-
Notifications
You must be signed in to change notification settings - Fork 0
/
redis_opt.go
76 lines (60 loc) · 1.54 KB
/
redis_opt.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
package oo
import (
"github.com/garyburd/redigo/redis"
)
// 分布式锁
type DistributedLock struct {
conn RedisConn
lock *RedisLock
}
func NewDistributedLock(key string) (ret *DistributedLock, conn RedisConn, err error) {
conn = GRedisPool.GetConn()
lock, err := InitRedisLock(conn, key)
if nil != err {
err = NewError("InitRedisLock key[%s] %v", key, err)
return
}
ret = &DistributedLock{
conn: conn,
lock: lock,
}
return
}
func (this *DistributedLock) Unlock() {
this.lock.UnLock()
GRedisPool.UnGetConn(this.conn)
}
// redis utils
func RedisExec(cmd string, args ...interface{}) (reply interface{}, err error) {
rconn := GRedisPool.GetConn()
defer GRedisPool.UnGetConn(rconn)
reply, err = rconn.Do(cmd, args...)
if nil != err {
return
}
return
}
func RedisExecInt64(cmd string, args ...interface{}) (ret int64, err error) {
ret, err = redis.Int64(RedisExec(cmd, args...))
return
}
func RedisExecString(cmd string, args ...interface{}) (ret string, err error) {
ret, err = redis.String(RedisExec(cmd, args...))
return
}
func RedisExecStrings(cmd string, args ...interface{}) (ret []string, err error) {
ret, err = redis.Strings(RedisExec(cmd, args...))
return
}
func RedisExecInt64Map(cmd string, args ...interface{}) (ret map[string]int64, err error) {
ret, err = redis.Int64Map(RedisExec(cmd, args...))
return
}
func RedisExecParse(val interface{}, cmd string, args ...interface{}) (err error) {
str, err := redis.String(RedisExec(cmd, args...))
if nil != err {
return
}
err = JsonUnmarshal([]byte(str), val)
return
}