ZRANGEBYSCORE && ZREVRANGEBYSCORE

ZRANGEBYSCORE && ZREVRANGEBYSCORE

  • 返回有序集中指定分?jǐn)?shù)區(qū)間內(nèi)的所有的成員。有序集成員按分?jǐn)?shù)值遞減(從小到大/從大到小)的次序排列。
  • 使用ZRANGEBYSCORE時(shí),具有相同分?jǐn)?shù)值的成員按字典序( lexicographical order )排列。
  • 使用ZREVRANGEBYSCORE時(shí),具有相同分?jǐn)?shù)值的成員按字典序的逆序(reverse lexicographical order )排列。
  • 使用(表示開區(qū)間
  • 使用-inf+inf表示不限制最小分?jǐn)?shù)和最大分?jǐn)?shù),在使用ZRANGEBYSCORE,-inf應(yīng)在前面,因?yàn)槭菑男〉酱螅琙REVRANGEBYSCORE反之
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]中的LIMIT的使用,和ZRANGEBYLEX 相同,不再記錄

Command

127.0.0.1:6379> ZADD fruit 1 cherry 2 plum 2 pear 3 grape
(integer) 4
// 查詢整個(gè)有序集合
127.0.0.1:6379> ZRANGEBYSCORE fruit -inf +inf WITHSCORES
1) "cherry"
2) "1"
3) "pear"
4) "2"
5) "plum"
6) "2"
7) "grape"
8) "3"
// 查詢分?jǐn)?shù)小于等于1的成員
127.0.0.1:6379> ZRANGEBYSCORE fruit -inf 1 WITHSCORES
1) "cherry"
2) "1"
// 查詢分?jǐn)?shù)大于2的成員
127.0.0.1:6379> ZRANGEBYSCORE fruit (2 +inf WITHSCORES
1) "grape"
2) "3"
// 查詢分?jǐn)?shù)大于等于1,且小于等于2的成員
127.0.0.1:6379> ZRANGEBYSCORE fruit 1 2 WITHSCORES
1) "cherry"
2) "1"
3) "pear"
4) "2"
5) "plum"
6) "2"

Code

只以ZRANGEBYSCORE示例

func zrangebyscore(c redis.Conn) {
    defer c.Do("DEL", "fruit")
    c.Do("ZADD", "fruit", 1, "cherry", 2, "plum", 2, "pear", 3, "grape")
    colorlog.Info("1. Query all the members.")
    membersWithScore, _ := redis.Strings(c.Do("ZRANGEBYSCORE", "fruit", "-inf", "+inf", "WITHSCORES"))
    for i, v := range membersWithScore {
        if i%2 == 0 {
            fmt.Println("member is:", v)
        } else {
            fmt.Println("Score is:", v)
        }
    }
    colorlog.Info("2. Query members that score is less than or equal with 1.")
    membersWithScore, _ = redis.Strings(c.Do("ZRANGEBYSCORE", "fruit", "-inf", "1", "WITHSCORES"))
    for i, v := range membersWithScore {
        if i%2 == 0 {
            fmt.Println("member is:", v)
        } else {
            fmt.Println("Score is:", v)
        }
    }
    colorlog.Info("3. Query members that score is greater than 2.")
    membersWithScore, _ = redis.Strings(c.Do("ZRANGEBYSCORE", "fruit", "(2", "+inf", "WITHSCORES"))
    for i, v := range membersWithScore {
        if i%2 == 0 {
            fmt.Println("member is:", v)
        } else {
            fmt.Println("Score is:", v)
        }
    }
    colorlog.Info("4. Query members that score is greater than or equal with 1, and lees than or equal with 2.")
    membersWithScore, _ = redis.Strings(c.Do("ZRANGEBYSCORE", "fruit", "1", "2", "WITHSCORES"))
    for i, v := range membersWithScore {
        if i%2 == 0 {
            fmt.Println("member is:", v)
        } else {
            fmt.Println("Score is:", v)
        }
    }
}

Output

$ go run main.go 
[INF]2020/04/21 11:06:31 1. Query all the members.
member is: cherry
Score is: 1
member is: pear
Score is: 2
member is: plum
Score is: 2
member is: grape
Score is: 3
[INF]2020/04/21 11:06:31 2. Query members that score is less than or equal with 1.
member is: cherry
Score is: 1
[INF]2020/04/21 11:06:31 3. Query members that score is greater than 2.
member is: grape
Score is: 3
[INF]2020/04/21 11:06:31 4. Query members that score is greater than or equal with 1, and lees than or equal with 2.
member is: cherry
Score is: 1
member is: pear
Score is: 2
member is: plum
Score is: 2
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容