增加(add)
如果key不存在将会创建一个空的sorted set,并执行add操作。
如果key存在但不是sorted set,将不能被添加。
- 添加单个值
// m1的score为5
Boolean flag = redisTemplate.boundZSetOps("zset-key").add("m1", 5);
- 添加多个值
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)
- 移除一个元素
Long count = redisTemplate.boundZSetOps("zset-key").remove("m1");
- 移除多个元素
Long count = redisTemplate.boundZSetOps("zset-key").remove("m2", "m3");
- 移除指定位置的元素
Long count = redisTemplate.boundZSetOps("zset-key").removeRange(0,-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:从高到底
- 正序获得索引值
// 第一步:排序(按照分数值从小到大排序)
redisTemplate.boundZSetOps("zset-key").range(0, -1);
// 第二步:获取指定值的索引(必须在排序的情况下,索引值从0开始)
Long index = redisTemplate.boundZSetOps("zset-key").rank("m1");
- 反序获得索引值
// 第一步:排序
redisTemplate.boundZSetOps("zset-key").reverseRange(0,-1);
// 第二步:获取指定值的索引
redisTemplate.boundZSetOps("zset-key").reverseRank("m1");
排序
- range:按照分数由小到大排序(指定位置区间)
- reverseRange:按照分数由大到小排序(指定位置区间)
- rangeByScore:按照分数由小到大排序(指定分数区间)
- reverseRangeByScore:按照分数由大到小排序(指定分数区间)
- rangeByScoreWithScores:按照分数由小到大排序(指定分数区间),并返回排序后的结果(带分数)
- reverseRangeByScoreWithScores:按照分数由大到小排序(指定分数区间),并返回排序后的结果(带分数)
- rangeWithScores:按照分数从小到大排序(指定位置区间),得到的值带有score
- reverseRangeWithScores:按照分数从大到小排序(指定分数区间),得到的值带有score
- 默认的按照分数从小到大排序(指定位置区间)
Set zset = redisTemplate.boundZSetOps("zset-key").range(0,-1);
- 按照分数从大到小排序(指定位置区间)
Set zset = redisTemplate.boundZSetOps("zset-key").reverseRange(0,-1);
- 按照分数从大到小排序(指定分数区间)
Set zset = redisTemplate.boundZSetOps("zset-key").rangeByScore(1.0,3.0);
- 按照分数从大到小排序(指定分数区间)
Set zset = redisTemplate.boundZSetOps("zset-key").reverseRangeByScore(1.0,3.0);
- 按照分数从小到大排序(指定分数区间),得到的值带有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());
}
- 按照分数从大到小排序(指定分数区间),得到的值带有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());
}
- 按照分数从小到大排序(指定位置区间),得到的值带有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());
}
- 按照分数从大到小排序(指定分数区间),得到的值带有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());
}
网友评论