美文网首页
SpringDataRedis-sorted set常用API

SpringDataRedis-sorted set常用API

作者: ChadJ | 来源:发表于2019-10-29 17:20 被阅读0次

    增加(add)

    如果key不存在将会创建一个空的sorted set,并执行add操作。
    如果key存在但不是sorted set,将不能被添加。

    1. 添加单个值
    // m1的score为5
    Boolean flag = redisTemplate.boundZSetOps("zset-key").add("m1", 5);
    
    1. 添加多个值
    ZSetOperations.TypedTuple<Object> m2 = new DefaultTypedTuple<Object>("m2", 2.0);
    ZSetOperations.TypedTuple<Object> m3 = new DefaultTypedTuple<Object>("m3", 5.8);
    HashSet<ZSetOperations.TypedTuple<Object>> typedTuples = new HashSet<ZSetOperations.TypedTuple<Object>>();
    typedTuples.add(m2);
    typedTuples.add(m3);
    Long count = redisTemplate.boundZSetOps("zset-key").add(typedTuples);
    
    

    删除(remove)

    1. 移除一个元素
    Long count = redisTemplate.boundZSetOps("zset-key").remove("m1");
    
    1. 移除多个元素
    Long count = redisTemplate.boundZSetOps("zset-key").remove("m2", "m3");
    
    1. 移除指定位置的元素
    Long count = redisTemplate.boundZSetOps("zset-key").removeRange(0,-1);
    
    1. 移除分数区间的元素
    Long count = redisTemplate.boundZSetOps("zset-key").removeRangeByScore(1.0,2.0);
    

    获取ZSet集合的大小(zCard&size)

    size的底层使用的是zCard

    Long size = redisTemplate.boundZSetOps("zset-key").size();
    Long zCard = redisTemplate.boundZSetOps("zset-key").zCard();
    

    获取指定score区间的个数(count)

    Long count = redisTemplate.boundZSetOps("zset-key").count(1.0, 4.0)
    

    通过value值获取对应分数(score)

    Double score = redisTemplate.boundZSetOps("zset-key").score("m1");
    

    score增加指定的数值(incrementScore)

    // 返回的double为增加后的值
    Double score = redisTemplate.boundZSetOps("zset-key").incrementScore("a", 10.0);
    

    获取zSet集合中的全部元素(scan)

    Cursor<ZSetOperations.TypedTuple<String>> scan = redisTemplate.boundZSetOps("zset-key").scan(ScanOptions.NONE);
    // 需要迭代
    while (scan.hasNext()){
      ZSetOperations.TypedTuple<Object> next = scan.next();
      System.out.println("value:"+next.getValue()+","+"score:"+next.getScore());
    }
    

    获取排序后的索引(rank)

    • rank:从低到高
    • reverseRank:从高到底
    1. 正序获得索引值
    // 第一步:排序(按照分数值从小到大排序)
    redisTemplate.boundZSetOps("zset-key").range(0, -1);
    // 第二步:获取指定值的索引(必须在排序的情况下,索引值从0开始)
    Long index = redisTemplate.boundZSetOps("zset-key").rank("m1");
    
    1. 反序获得索引值
    // 第一步:排序
    redisTemplate.boundZSetOps("zset-key").reverseRange(0,-1);
    // 第二步:获取指定值的索引
    redisTemplate.boundZSetOps("zset-key").reverseRank("m1");
    

    排序

    • range:按照分数由小到大排序(指定位置区间)
    • reverseRange:按照分数由大到小排序(指定位置区间)
    • rangeByScore:按照分数由小到大排序(指定分数区间)
    • reverseRangeByScore:按照分数由大到小排序(指定分数区间)
    • rangeByScoreWithScores:按照分数由小到大排序(指定分数区间),并返回排序后的结果(带分数)
    • reverseRangeByScoreWithScores:按照分数由大到小排序(指定分数区间),并返回排序后的结果(带分数)
    • rangeWithScores:按照分数从小到大排序(指定位置区间),得到的值带有score
    • reverseRangeWithScores:按照分数从大到小排序(指定分数区间),得到的值带有score
    1. 默认的按照分数从小到大排序(指定位置区间)
    Set zset = redisTemplate.boundZSetOps("zset-key").range(0,-1);
    
    1. 按照分数从大到小排序(指定位置区间)
    Set zset = redisTemplate.boundZSetOps("zset-key").reverseRange(0,-1);
    
    1. 按照分数从大到小排序(指定分数区间)
    Set zset = redisTemplate.boundZSetOps("zset-key").rangeByScore(1.0,3.0);
    
    1. 按照分数从大到小排序(指定分数区间)
    Set zset = redisTemplate.boundZSetOps("zset-key").reverseRangeByScore(1.0,3.0);
    
    1. 按照分数从小到大排序(指定分数区间),得到的值带有score
    Set<ZSetOperations.TypedTuple<Object>> zset = redisTemplate.boundZSetOps("zset-key").rangeByScoreWithScores(1.0, 3.0);
    // 需要迭代
    Iterator<ZSetOperations.TypedTuple<Object>> iterator = zset.iterator();
    while (iterator.hasNext()){
      ZSetOperations.TypedTuple<Object> next = iterator.next();
      System.out.println("value:"+next.getValue()+","+"score:"+next.getScore());
    }
    
    1. 按照分数从大到小排序(指定分数区间),得到的值带有score
    Set<ZSetOperations.TypedTuple<Object>> zset = redisTemplate.boundZSetOps("zset-key").reverseRangeByScoreWithScores(1.0, 3.0);
    // 需要迭代
    Iterator<ZSetOperations.TypedTuple<Object>> iterator = zset.iterator();
    while (iterator.hasNext()){
      ZSetOperations.TypedTuple<Object> next = iterator.next();
      System.out.println("value:"+next.getValue()+","+"score:"+next.getScore());
    }
    
    1. 按照分数从小到大排序(指定位置区间),得到的值带有score
    Set<ZSetOperations.TypedTuple<Object>> zset = redisTemplate.boundZSetOps("zset-key").rangeWithScores(0, -1);
    // 需要迭代
    Iterator<ZSetOperations.TypedTuple<Object>> iterator = zset.iterator();
    while (iterator.hasNext()){
      ZSetOperations.TypedTuple<Object> next = iterator.next();
      System.out.println("value:"+next.getValue()+","+"score:"+next.getScore());
    }
    
    1. 按照分数从大到小排序(指定分数区间),得到的值带有score
    Set<ZSetOperations.TypedTuple<Object>> zset = redisTemplate.boundZSetOps("zset-key").reverseRangeWithScores(0, -1);
    // 需要迭代
    Iterator<ZSetOperations.TypedTuple<Object>> iterator = zset.iterator();
    while (iterator.hasNext()){
      ZSetOperations.TypedTuple<Object> next = iterator.next();
      System.out.println("value:"+next.getValue()+","+"score:"+next.getScore());
    }
    

    相关文章

      网友评论

          本文标题:SpringDataRedis-sorted set常用API

          本文链接:https://www.haomeiwen.com/subject/whzwvctx.html