-
Notifications
You must be signed in to change notification settings - Fork 2
/
redisqueue.go
59 lines (46 loc) · 1.04 KB
/
redisqueue.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
package redisqueue
import "github.com/DavidHuie/httpq/Godeps/_workspace/src/github.com/garyburd/redigo/redis"
const (
redisListName = "httpq"
)
type RedisQueue struct {
pool *redis.Pool
}
func NewRedisQueue(pool *redis.Pool) *RedisQueue {
return &RedisQueue{pool}
}
func (r *RedisQueue) Push(bytes []byte) error {
conn := r.pool.Get()
defer conn.Close()
_, err := conn.Do("LPUSH", redisListName, bytes)
if err != nil {
return err
}
return nil
}
func (r *RedisQueue) Pop() ([]byte, error) {
conn := r.pool.Get()
defer conn.Close()
response, err := conn.Do("RPOP", redisListName)
if err != nil {
return nil, err
}
bytes, err := redis.Bytes(response, nil)
if err != redis.ErrNil && err != nil {
return nil, err
}
return bytes, nil
}
func (r *RedisQueue) Size() (uint64, error) {
conn := r.pool.Get()
defer conn.Close()
response, err := conn.Do("LLEN", redisListName)
if err != nil {
return 0, err
}
size, err := redis.Uint64(response, nil)
if err != redis.ErrNil && err != nil {
return 0, err
}
return size, nil
}