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