主方法
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");
**/
}