redis操作ZSet

主方法

public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        //测试jedis连接
        //System.out.println(jedis.ping());
     //操作ZSet
        testZSort(jedis);
    }

具体实现

 /***
    *@author zh
    *@Date 2020/12/31
    *@MethodNotes  测试ZSort
    **/
    public static void testZSort(Jedis jedis){
        /***
        *@author zh
        *@Date 2020/12/31
        *@MethodNotes  首先创建一个map集合,因为是看的api所以这个东西有一点点坑,它比Set多一个字段score用于排序等操作
         * 如果要创建这个ZSet 有一个key是必须的,然后就需要一个map集合,但是这个map集合的泛型是指定的<String,Double>
         * 所以第二个值指定为Double类型,且只能是Double类型
         * 不能自己修改,之前我写的是一个<String,String>然后就报错了,看了菜鸟里面的介绍和源码原来因为要排序的原因
         * 这个在redis的操作命令为: zrange key 0 -1 withscores
         * 如果命令没有加withscores那么只会显示值(这个值的显示是根据score的数字大小进行排序后的顺序显示的),如果加上就会显示score
         * 源码里面关于zadd方法重载了四种
         * Long zadd(String var1, double var2, String var4);
         * 这一种主要是添加一个key,并且给这个key一个编号(我目前是这么理解的),第三个是value
         * jedis.zadd("user",1D,"aaa");
         *
         * Long zadd(String var1, double var2, String var4, ZAddParams var5);
         * 第二种实现,主要是多了一个ZaddParams,多次翻看也没弄明白这个参数到底是干嘛用的,如果有知道的欢迎交流
         * jedis.zadd("user",1D,"aaa", ZAddParams.zAddParams().nx());
         *
         * Long zadd(String var1, Map<String, Double> var2);
         * 第三种实现就是把参数放进一个map集合里面,如上所述,这个map的泛型只能是String,Map
         *  测试代码
         *         HashMap<String, Double> map = new HashMap<>();
         *         map.put("name",1D);
         *         map.put("age",3D);
         *         map.put("qq",2D);
         *         jedis.zadd("user",map);
         *
         * Long zadd(String var1, Map<String, Double> var2, ZAddParams var3);
         * 至于第四种实现由于实在没搞懂ZAddParams的作用,直接放弃了不过两种也够使用了
         *
         * 获取ZSet里面的所有值
         * jedis.zrange("user", 0, -1);
         *
         * 获取ZSet里面所有的值,包括score
         * jedis.zrangeWithScores("user", 0, -1);
         *
         * 根据score在ZSet集合中获取区间的值  min=1,max=3
         * jedis.zrangeByScore("user", 1, 3);
         *
         * 根据score在ZSet集合中获取区间的值,包括score
         * jedis.zrangeByScoreWithScores("user", 1, 3);
         * 在java中凡是加了withScores的返回数值都有些奇怪,不懂,但是在redis中
         * 使用 zrangebyscore key min max withscores  返回的就是正常的数据+score
         *
         * 返回集合中value=name 的score
         * jedis.zscore("user", "name");
         *
         * 获取集合中value=name 的socre排名  score下标为0
         * jedis.zrank("user", "name");
         *
         * 删除集合中value=name的元素
         * jedis.zrem("user","name");
         *
         * 获取ZSet集合中的元素个数
         * jedis.zcard("user");
         *
         * 获取score在区间的个数  min=0,max=3  最大值可以超过集合长度
         * 类似于另一个获取的元素个数,如果有一条数据没有score的话,不过这个集合中应该没有无score的数据吧
         * jedis.zcount("user", 0, 3);
         *
         *
         * 把这个value=qq的元素的score+=5    目前也不知道有什么用处,唯一明显的是他通过score的+=会让他的排名下降
         * jedis.zincrby("user",5,"qq");
        **/


    }
原文地址:https://www.cnblogs.com/zhboke/p/14218136.html