Skip to content

Commit 0363e73

Browse files
committed
add zset
1 parent b817c4e commit 0363e73

3 files changed

Lines changed: 121 additions & 0 deletions

File tree

redis/global.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,13 @@ func (c *Client) Rename(key string, newKeyName string) error {
8383
return nil
8484

8585
}
86+
87+
//Rename rename the key
88+
func (c *Client) FlushAll() error {
89+
conn := c.pool.Get()
90+
defer conn.Close()
91+
92+
_, err := conn.Do("FLUSHALL")
93+
return err
94+
95+
}

redis/zset.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package redis
2+
3+
import (
4+
"github.com/gomodule/redigo/redis"
5+
)
6+
7+
// ZADD add score and member to sorted set
8+
// if already exist, return count = 0 and update member's score
9+
// else return count = 1
10+
func (c *Client) ZAdd(key string, score int, member string) (count int64, err error) {
11+
conn := c.pool.Get()
12+
defer conn.Close()
13+
14+
return redis.Int64(conn.Do("ZADD", key, score, member))
15+
16+
}
17+
18+
// ZAddWithIncr incr score to member
19+
// return count = origin score + incr score
20+
// eg. already exist member = a, score = 10
21+
// zdd [key] incr 10 a
22+
// return count = 20
23+
// now member = a , score = 20
24+
func (c *Client) ZAddWithIncr(key string, score int, member string) (resultScore int64, err error) {
25+
conn := c.pool.Get()
26+
defer conn.Close()
27+
28+
return redis.Int64(conn.Do("ZADD", key, "INCR", score, member))
29+
30+
}
31+
32+
// ZRange list members from start to end
33+
func (c *Client) ZRange(key string, start, end int) ([]string, error) {
34+
conn := c.pool.Get()
35+
defer conn.Close()
36+
37+
return redis.Strings(conn.Do("ZRANGE", key, start, end))
38+
39+
}
40+
41+
// ZRange list members from start to end
42+
func (c *Client) ZRangeWithScore(key string, start, end int) ([]string, error) {
43+
conn := c.pool.Get()
44+
defer conn.Close()
45+
46+
return redis.Strings(conn.Do("ZRANGE", key, start, end, "WITHSCORES"))
47+
48+
}
49+
50+
// ZRank return the index of the member
51+
func (c *Client) ZRank(key string, member string) (int64, error) {
52+
conn := c.pool.Get()
53+
defer conn.Close()
54+
55+
return redis.Int64(conn.Do("ZRANK", key, member))
56+
57+
}

redis/zset_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package redis
2+
3+
import (
4+
"testing"
5+
6+
"github.com/vgmdj/utils/logger"
7+
)
8+
9+
func TestZSet(t *testing.T) {
10+
c := testRedisClient()
11+
c.FlushAll()
12+
13+
key := "TestSet"
14+
_, err := c.ZAdd(key, 16, "a")
15+
if err != nil {
16+
t.Error(err.Error())
17+
return
18+
}
19+
20+
score, err := c.ZAddWithIncr(key, 4, "a")
21+
if err != nil {
22+
t.Error(err.Error())
23+
return
24+
}
25+
26+
if score != 20 {
27+
t.Errorf("score should be 20, but get %d\n", score)
28+
return
29+
}
30+
31+
for i := 0; i < 10; i++ {
32+
c.ZAdd(key, i+5, string('b'+i))
33+
}
34+
35+
res, err := c.ZRangeWithScore(key, 0, 10)
36+
if err != nil {
37+
t.Error(err.Error())
38+
return
39+
}
40+
41+
t.Log(res)
42+
43+
index,err := c.ZRank(key,"f")
44+
if err != nil {
45+
logger.Error(err.Error())
46+
return
47+
}
48+
49+
if index != 4{
50+
t.Errorf("index should be 4 , but get %d\n",index)
51+
return
52+
}
53+
54+
}

0 commit comments

Comments
 (0)