sorted set操作

Posted 四季常青

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sorted set操作相关的知识,希望对你有一定的参考价值。

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

 

1.向有序集合添加一个或多个成员,或者更新已存在成员的分数ZADD key score1 member1 [score2 member2] 向集合zset中放入zs和li的姓名和成绩

2.通过索引区间返回有序集合成指定区间内的成员ZRANGE key start stop [WITHSCORES] 

3.获取有序集合的成员数ZCARD key 

4.计算在有序集合中指定区间分数的成员数ZCOUNT key min max 

如:查询分数在90和100之间的学员个数

5.返回有序集合中指定成员的索引ZRANK key member 

 

6.移除有序集合中的一个或多个成员ZREM key member [member ...] 

7.移除有序集合中给定的排名区间的所有成员ZREMRANGEBYRANK key start stop 

8.移除有序集合中给定的分数区间的所有成员ZREMRANGEBYSCORE key min max 

9.返回有序集中,成员的分数值ZSCORE key member 

10.返回有序集中指定区间内的成员,通过索引,分数从高到底ZREVRANGE key start stop [WITHSCORES] 

11.返回有序集中指定分数区间内的成员,分数从高到低排序 ZREVRANGEBYSCORE key max min [WITHSCORES] 

12.有序集合中对指定成员的分数加上增量 increment ZINCRBY key increment member 

 

sort set 代码操作:

package com.study.util;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;

public class RedisSortSet {

    public static void main(String[] args) {
        Jedis jedis = RedisUtil.getJedis();
        //向有序集合zset中添加zs和li的成绩和姓名
        
        //jedis.zadd("zset", 99, "zs");
        Map<String, Double> scoreMembers = new HashMap<String,Double>();
        scoreMembers.put("zs", 90.0);
        scoreMembers.put("li", 89.0);
        jedis.zadd("zset", scoreMembers);
        
        //通过索引返回有序集合指定区间的成员
        Set<Tuple> scores = jedis.zrangeWithScores("zset", 0, -1);
        System.out.println("zset的成员:");
        for (Tuple tuple : scores) {
            System.out.println(tuple.getElement());
            System.out.println(tuple.getScore());
        }
        
        //获取有序集合的成员数
        long count = jedis.zcard("zset");
        System.out.println("集合的个数:" + count);
        
        //查询分数在90和100之间的学员个数
        count = jedis.zcount("zset", 90, 100);
        System.out.println("分数在90和100之间的学员个数:" + count);
        
        //返回li在集合中的索引 redis是安装score从小到大排序的,所以li在一位
        long index = jedis.zrank("zset", "li");
        System.out.println("li在集合中的索引:" + index);
        
        //移除学员li
        jedis.zrem("zset", "li");
        
        //根据排名移除集合中的元素
        jedis.zremrangeByRank("zset", 0, 2);
        
        scoreMembers.put("zs", 80.0);
        scoreMembers.put("ls", 90.0);
        scoreMembers.put("ws", 85.0);
        jedis.zadd("zset", scoreMembers);
        
        //根据分数移除集合中的元素
        jedis.zremrangeByScore("zset", 80, 85);
        
        //返回ls的分值
        double score = jedis.zscore("zset", "ls");
        System.out.println("ls的分值:" + score);
        
        jedis.zadd("zset", 95, "zs");
        
        //通过索引,从高到低返回指定区间的元素
        scores = jedis.zrevrangeWithScores("zset", 0, -1);
        for (Tuple tuple : scores) {
            System.out.println(tuple.getElement());
            System.out.println(tuple.getScore());
        }
        //通过分数,从高到低返回指定区间的元素
        scores = jedis.zrevrangeByScoreWithScores("zset", 95, 80);
        for (Tuple tuple : scores) {
            System.out.println(tuple.getElement());
            System.out.println(tuple.getScore());
        }
        //将ls的分数加10
        jedis.zincrby("zset", 10, "li");
        scores = jedis.zrangeWithScores("zset", 0, -1);
        System.out.println("zset的成员:");
        for (Tuple tuple : scores) {
            System.out.println(tuple.getElement());
            System.out.println(tuple.getScore());
        }
        jedis.close();
    }
}
View Code

 

代码git地址:https://gitee.com/sjcq/redis.git

以上是关于sorted set操作的主要内容,如果未能解决你的问题,请参考以下文章

python [代码片段]一些有趣的代码#sort

Redis入门到精通——sorted_set基本操作sorted_set扩展操作(实现排行榜功能)sorted_set注意事项sorted_set应用场景(定时任务执行顺序消息任务的权重

Redis入门到精通——sorted_set基本操作sorted_set扩展操作(实现排行榜功能)sorted_set注意事项sorted_set应用场景(定时任务执行顺序消息任务的权重

直接在安装了redis的Linux机器上操作redis数据存储类型--对Sorted-Sets操作

Set,Sorted Set相关命令操作,批量插入及管道,事务

redis之sorted sets类型及操作