From 489c699bcbc16e3273c3077c71327ffede4388c0 Mon Sep 17 00:00:00 2001 From: Ally Dale Date: Tue, 27 Aug 2019 17:20:35 +0800 Subject: [PATCH] ZSet operation --- sysmodule/RedisModule.go | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/sysmodule/RedisModule.go b/sysmodule/RedisModule.go index ff008f8..5ae35ea 100644 --- a/sysmodule/RedisModule.go +++ b/sysmodule/RedisModule.go @@ -1222,7 +1222,7 @@ func makeListJson(redisReply []interface{}, withScores bool) []byte { return buf.Bytes() } -func (slf *RedisModule) ZRangeByScoreJSON(key string, start, stop int, ascend bool, withScores bool, data interface{}) error { +func (slf *RedisModule) ZRangeByScoreJSON(key string, start, stop float64, ascend bool, withScores bool, data interface{}) error { if withScores { if _, ok := data.(*[]ZSetDataWithScore); !ok { return errors.New("withScores must decode by []ZSetDataWithScore") @@ -1241,7 +1241,7 @@ func (slf *RedisModule) ZRangeByScoreJSON(key string, start, stop int, ascend bo return nil } -func (slf *RedisModule) ZRangeByScore(key string, start, stop int, ascend bool, withScores bool) ([]byte, error) { +func (slf *RedisModule) ZRangeByScore(key string, start, stop float64, ascend bool, withScores bool) ([]byte, error) { conn, err := slf.getConn() if err != nil { return nil, err @@ -1263,6 +1263,41 @@ func (slf *RedisModule) ZRangeByScore(key string, start, stop int, ascend bool, return makeListJson(reply.([]interface{}), withScores), nil } +//获取指定member的排名 +func (slf *RedisModule) ZScore(key string, member interface{}) (float64, error) { + conn, err := slf.getConn() + if err != nil { + return -1, err + } + defer conn.Close() + cmd := "ZSCORE" + var reply interface{} + reply, err = conn.Do(cmd, key, member) + if err != nil { + return -1, err + } + return redis.Float64(reply, err) +} + +//获取指定member的排名 +func (slf *RedisModule) ZRank(key string, member interface{}, ascend bool) (int, error) { + conn, err := slf.getConn() + if err != nil { + return -1, err + } + defer conn.Close() + cmd := "ZREVRANK" + if ascend { + cmd = "ZRANK" + } + var reply interface{} + reply, err = conn.Do(cmd, key, member) + if err != nil { + return -1, err + } + return redis.Int(reply, err) +} + func (slf *RedisModule) ZREMRANGEBYSCORE(key string, start, stop interface{}) error { conn, err := slf.getConn() if err != nil {