SpringDataRedis-sorted set常用API

2019-10-29  本文已影响0人  ChadJ

增加(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)

  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");

排序

  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());
}
上一篇下一篇

猜你喜欢

热点阅读