public static class RedisHelper.ZSetOps extends Object
特别说明: ZSet是有序的, 不仅体现在: redis中的存储上有序。 还体现在: 此工具类ZSetOps中返回值类型为Set>的方法, 实际返回类型是LinkedHashSet>
提示: redis中的ZSet, 一定程度等于redis中的Set + redis中的Hash的结合体。 提示: redis中String的数据结构可参考resources/data-structure/ZSet(有序集合)的数据结构(示例一).png redis中String的数据结构可参考resources/data-structure/ZSet(有序集合)的数据结构(示例二).png 提示: ZSet中的entryKey即为成员项, entryValue即为这个成员项的分值, ZSet根据成员的分值,来堆成员进行排序。
| 构造器和说明 |
|---|
ZSetOps() |
| 限定符和类型 | 方法和说明 |
|---|---|
static long |
zAdd(String key,
Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> entries)
批量添加entry
|
static boolean |
zAdd(String key,
String item,
double score)
向(key对应的)zset中添加(item, score)
注: item为entryKey成员项, score为entryValue分数值。
|
static long |
zCount(String key,
double minScore,
double maxScore)
统计(key对应的zset中)score处于[minScore, maxScore]中的item的个数
|
static double |
zIncrementScore(String key,
String item,
double delta)
增/减 (key对应的zset中,)item的分数值
|
static long |
zIntersectAndStore(String key,
Collection<String> otherKeys,
String storeKey)
获取多个(key对应的)ZSet的交集, 并将结果add到storeKey对应的ZSet中。
|
static long |
zIntersectAndStore(String key,
String otherKey,
String storeKey)
获取两个(key对应的)ZSet的交集, 并将结果add到storeKey对应的ZSet中。
|
static Set<String> |
zRange(String key,
long start,
long end)
根据索引位置, 获取(key对应的)zset中排名处于[start, end]中的item项集
注: 不论是使用正向排名,还是使用反向排名, 使用此方法时, 应保证 startIndex代表的元素的
位置在endIndex代表的元素的位置的前面, 如:
示例一: RedisHelper.ZSetOps.zRange("name", 0, 2);
示例二: RedisHelper.ZSetOps.zRange("site", -2, -1);
示例三: RedisHelper.ZSetOps.zRange("foo", 0, -1);
注: 若key不存在, 则返回空的集合。
|
static Set<String> |
zRangeByScore(String key,
double minScore,
double maxScore)
根据score, 获取(key对应的)zset中分数值处于[minScore, maxScore]中的item项集
注: 若key不存在, 则返回空的集合。
|
static Set<String> |
zRangeByScore(String key,
double minScore,
double maxScore,
long offset,
long count)
根据score, 获取(key对应的)zset中分数值处于[minScore, maxScore]中的, score处于[minScore,
排名大于等于offset的count个item项
特别注意: 对于不是特别熟悉redis的人来说, offset 和 count最好都使用正数, 避免引起理解上的歧义。
|
static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> |
zRangeByScoreWithScores(String key,
double minScore,
double maxScore)
获取(key对应的)zset中的所有score处于[minScore, maxScore]中的entry
|
static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> |
zRangeByScoreWithScores(String key,
double minScore,
double maxScore,
long offset,
long count)
获取(key对应的)zset中, score处于[minScore, maxScore]里的、排名大于等于offset的count个entry
特别注意: 对于不是特别熟悉redis的人来说, offset 和 count最好都使用正数, 避免引起理解上的歧义。
|
static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> |
zRangeWithScores(String key,
long start,
long end)
根据索引位置, 获取(key对应的)zset中排名处于[start, end]中的entry集
注: 不论是使用正向排名,还是使用反向排名, 使用此方法时, 应保证 startIndex代表的元素的
位置在endIndex代表的元素的位置的前面, 如:
示例一: RedisHelper.ZSetOps.zRange("name", 0, 2);
示例二: RedisHelper.ZSetOps.zRange("site", -2, -1);
示例三: RedisHelper.ZSetOps.zRange("foo", 0, -1);
注: 若key不存在, 则返回空的集合。
|
static long |
zRank(String key,
Object item)
返回item在(key对应的)zset中的(按score从小到大的)排名
注: 排名从0开始。
|
static long |
zRemove(String key,
Object... items)
从(key对应的)zset中移除项
注:若key不存在,则返回0
|
static long |
zRemoveRange(String key,
long startRange,
long endRange)
移除(key对应的)zset中, 排名范围在[startIndex, endIndex]内的item
注:默认的,按score.item升序排名, 排名从0开始
注: 类似于List中的索引, 排名可以分为多个方式:
从前到后(正向)的排名: 0、1、2...
|
static long |
zRemoveRangeByScore(String key,
double minScore,
double maxScore)
移除(key对应的)zset中, score范围在[minScore, maxScore]内的item
提示: 虽然删除范围包含两侧的端点(即:包含minScore和maxScore), 但是由于double存在精度问题,所以建议:
设置值时,minScore应该设置得比要删除的项里,最小的score还小一点
maxScore应该设置得比要删除的项里,最大的score还大一点
追注: 本人简单测试了几组数据,暂未出现精度问题。
|
static Set<String> |
zReverseRange(String key,
long start,
long end)
获取时, 先按score倒序, 然后根据索引位置, 获取(key对应的)zset中排名处于[start, end]中的item项集
|
static Set<String> |
zReverseRangeByScore(String key,
double minScore,
double maxScore)
获取时, 先按score倒序, 然后根据score, 获取(key对应的)zset中分数值处于[minScore, maxScore]中的item项集
|
static Set<String> |
zReverseRangeByScore(String key,
double minScore,
double maxScore,
long offset,
long count)
获取时, 先按score倒序, 然后根据score, 获取(key对应的)zset中分数值处于[minScore, maxScore]中的,
score处于[minScore,排名大于等于offset的count个item项
|
static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> |
zReverseRangeByScoreWithScores(String key,
double minScore,
double maxScore)
获取时, 先按score倒序, 然后获取(key对应的)zset中的所有score处于[minScore, maxScore]中的entry
|
static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> |
zReverseRangeWithScores(String key,
long start,
long end)
获取时, 先按score倒序, 然后根据索引位置, 获取(key对应的)zset中排名处于[start, end]中的entry集
|
static long |
zReverseRank(String key,
Object item)
返回item在(key对应的)zset中的(按score从大到小的)排名
注: 排名从0开始。
|
static double |
zScore(String key,
Object item)
统计(key对应的)zset中指定item的score
|
static long |
zSize(String key)
统计(key对应的)zset中item的个数
注: 此方法等价于
zZCard(String) |
static long |
zUnionAndStore(String key,
Collection<String> otherKeys,
String storeKey)
获取两个(key对应的)ZSet的并集, 并将结果add到storeKey对应的ZSet中。
|
static long |
zUnionAndStore(String key,
String otherKey,
String storeKey)
获取两个(key对应的)ZSet的并集, 并将结果add到storeKey对应的ZSet中。
|
static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> |
zWholeZSetEntry(String key)
获取(key对应的)zset中的所有entry
|
static Set<String> |
zWholeZSetItem(String key)
获取(key对应的)zset中的所有item项
|
static long |
zZCard(String key)
统计(key对应的)zset中item的个数
注: 此方法等价于
zSize(String) |
public static boolean zAdd(String key, String item, double score)
注: item为entryKey成员项, score为entryValue分数值。
注: 若(key对应的)zset中已存在(与此次要添加的项)相同的item项,那么此次添加操作会失败,返回false; 但是!!! zset中原item的score会被更新为此次add的相同item项的score。 所以, 也可以通过zAdd达到更新item对应score的目的。
注: score可为正、可为负、可为0; 总之, double范围内都可以。
注: 若score的值一样,则按照item排序。
key - 定位set的keyitem - 要往(key对应的)zset中添加的成员项score - item的分值public static long zAdd(String key, Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> entries)
注: 若entry
key - 定位set的keyentries - 要添加的entrypublic static long zRemove(String key, Object... items)
注:若key不存在,则返回0
key - 定位set的keyitems - 要移除的项集public static long zRemoveRange(String key, long startRange, long endRange)
注:默认的,按score.item升序排名, 排名从0开始
注: 类似于List中的索引, 排名可以分为多个方式: 从前到后(正向)的排名: 0、1、2... 从后到前(反向)的排名: -1、-2、-3...
注: 不论是使用正向排名,还是使用反向排名, 使用此方法时, 应保证 startRange代表的元素的位置 在endRange代表的元素的位置的前面, 如: 示例一: RedisHelper.ZSetOps.zRemoveRange("name", 0, 2); 示例二: RedisHelper.ZSetOps.zRemoveRange("site", -2, -1); 示例三: RedisHelper.ZSetOps.zRemoveRange("foo", 0, -1);
注:若key不存在,则返回0
key - 定位set的keystartRange - 开始项的排名endRange - 结尾项的排名public static long zRemoveRangeByScore(String key, double minScore, double maxScore)
提示: 虽然删除范围包含两侧的端点(即:包含minScore和maxScore), 但是由于double存在精度问题,所以建议: 设置值时,minScore应该设置得比要删除的项里,最小的score还小一点 maxScore应该设置得比要删除的项里,最大的score还大一点 追注: 本人简单测试了几组数据,暂未出现精度问题。
注:若key不存在,则返回0
key - 定位set的keyminScore - score下限(含这个值)maxScore - score上限(含这个值)public static double zIncrementScore(String key, String item, double delta)
key - 定位zset的keyitem - 项delta - 变化量(正 - 增, 负 - 减)public static long zRank(String key, Object item)
注: 排名从0开始。 即意味着,此方法等价于: 返回item在(key对应的)zset中的位置索引。 注: 若key或item不存在, 返回null。 注: 排序规则是score,item, 即:优先以score排序,若score相同,则再按item排序。
key - 定位zset的keyitem - 项public static long zReverseRank(String key, Object item)
注: 排名从0开始。补充: 因为是按score从大到小排序的, 所以最大score对应的item的排名为0。 注: 若key或item不存在, 返回null。 注: 排序规则是score,item, 即:优先以score排序,若score相同,则再按item排序。
key - 定位zset的keyitem - 项public static Set<String> zRange(String key, long start, long end)
注: 不论是使用正向排名,还是使用反向排名, 使用此方法时, 应保证 startIndex代表的元素的 位置在endIndex代表的元素的位置的前面, 如: 示例一: RedisHelper.ZSetOps.zRange("name", 0, 2); 示例二: RedisHelper.ZSetOps.zRange("site", -2, -1); 示例三: RedisHelper.ZSetOps.zRange("foo", 0, -1);
注: 若key不存在, 则返回空的集合。
注: 当[start, end]的范围比实际zset的范围大时, 返回范围上"交集"对应的项集合。
key - 定位zset的keystart - 排名开始位置end - 排名结束位置public static Set<String> zWholeZSetItem(String key)
key - 定位zset的键zRange(String, long, long)public static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> zRangeWithScores(String key, long start, long end)
注: 不论是使用正向排名,还是使用反向排名, 使用此方法时, 应保证 startIndex代表的元素的 位置在endIndex代表的元素的位置的前面, 如: 示例一: RedisHelper.ZSetOps.zRange("name", 0, 2); 示例二: RedisHelper.ZSetOps.zRange("site", -2, -1); 示例三: RedisHelper.ZSetOps.zRange("foo", 0, -1);
注: 若key不存在, 则返回空的集合。
注: 当[start, end]的范围比实际zset的范围大时, 返回范围上"交集"对应的项集合。
注: 此方法和zRange(String, long, long)类似,不过此方法返回的不是item集, 而是entry集
key - 定位zset的keystart - 排名开始位置end - 排名结束位置public static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> zWholeZSetEntry(String key)
key - 定位zset的键zRangeWithScores(String, long, long)public static Set<String> zRangeByScore(String key, double minScore, double maxScore)
注: 若key不存在, 则返回空的集合。 注: 当[minScore, maxScore]的范围比实际zset中score的范围大时, 返回范围上"交集"对应的项集合。
提示: 虽然删除范围包含两侧的端点(即:包含minScore和maxScore), 但是由于double存在精度问题,所以建议: 设置值时,minScore应该设置得比要删除的项里,最小的score还小一点 maxScore应该设置得比要删除的项里,最大的score还大一点 追注: 本人简单测试了几组数据,暂未出现精度问题。
key - 定位zset的keyminScore - score下限maxScore - score上限public static Set<String> zRangeByScore(String key, double minScore, double maxScore, long offset, long count)
特别注意: 对于不是特别熟悉redis的人来说, offset 和 count最好都使用正数, 避免引起理解上的歧义。
注: 若key不存在, 则返回空的集合。
提示: 虽然删除范围包含两侧的端点(即:包含minScore和maxScore), 但是由于double存在精度问题,所以建议: 设置值时,minScore应该设置得比要删除的项里,最小的score还小一点 maxScore应该设置得比要删除的项里,最大的score还大一点 追注: 本人简单测试了几组数据,暂未出现精度问题。
key - 定位zset的keyminScore - score下限maxScore - score上限offset - 偏移量(即:排名下限)count - 期望获取到的元素个数public static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> zRangeByScoreWithScores(String key, double minScore, double maxScore)
key - 定位zset的键minScore - score下限maxScore - score上限
注: 若key不存在, 则返回空的集合。
注: 当[minScore, maxScore]的范围比实际zset中score的范围大时, 返回范围上"交集"对应的项集合。
public static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> zRangeByScoreWithScores(String key, double minScore, double maxScore, long offset, long count)
特别注意: 对于不是特别熟悉redis的人来说, offset 和 count最好都使用正数, 避免引起理解上的歧义。
key - 定位zset的键minScore - score下限maxScore - score上限offset - 偏移量(即:排名下限)count - 期望获取到的元素个数public static Set<String> zReverseRange(String key, long start, long end)
public static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> zReverseRangeWithScores(String key, long start, long end)
public static Set<String> zReverseRangeByScore(String key, double minScore, double maxScore)
public static Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple<String>> zReverseRangeByScoreWithScores(String key, double minScore, double maxScore)
public static Set<String> zReverseRangeByScore(String key, double minScore, double maxScore, long offset, long count)
public static long zCount(String key, double minScore, double maxScore)
key - 定位zset的keyminScore - score下限maxScore - score上限public static long zSize(String key)
注: 此方法等价于zZCard(String)
key - 定位zset的keypublic static long zZCard(String key)
注: 此方法等价于zSize(String)
key - 定位zset的keypublic static double zScore(String key, Object item)
key - 定位zset的keyitem - zset中的itempublic static long zUnionAndStore(String key, String otherKey, String storeKey)
注: 和set一样,zset中item是唯一的, 在多个zset进行Union时, 处理相同的item时, score的值会变为对应的score之和,如: RedisHelper.ZSetOps.zAdd("name1", "a", 1);和RedisUtil.ZSetOps.zAdd("name2", "a", 2); 对(name1和name2对应的)zset进行zUnionAndStore之后,新的zset中的项a,对应的score值为3
case1: 交集不为空, storeKey不存在, 则 会创建对应的storeKey,并将并集添加到(storeKey对应的)ZSet中 case2: 交集不为空, storeKey已存在, 则 会清除原(storeKey对应的)ZSet中所有的项,然后将并集添加到(storeKey对应的)ZSet中 case3: 交集为空, 则不进行下面的操作, 直接返回0
key - 定位其中一个zset的键otherKey - 定位另外的zset的键storeKey - 定位(要把交集添加到哪个)set的keypublic static long zUnionAndStore(String key, Collection<String> otherKeys, String storeKey)
注: 和set一样,zset中item是唯一的, 在多个zset进行Union时, 处理相同的item时, score的值会变为对应的score之和,如: RedisHelper.ZSetOps.zAdd("name1", "a", 1);和RedisUtil.ZSetOps.zAdd("name2", "a", 2); 对(name1和name2对应的)zset进行zUnionAndStore之后,新的zset中的项a,对应的score值为3
case1: 并集不为空, storeKey不存在, 则 会创建对应的storeKey,并将并集添加到(storeKey对应的)ZSet中 case2: 并集不为空, storeKey已存在, 则 会清除原(storeKey对应的)ZSet中所有的项,然后将并集添加到(storeKey对应的)ZSet中 case3: 并集为空, 则不进行下面的操作, 直接返回0
key - 定位其中一个set的键otherKeys - 定位其它set的键集storeKey - 定位(要把并集添加到哪个)set的keypublic static long zIntersectAndStore(String key, String otherKey, String storeKey)
注: 和set一样,zset中item是唯一的, 在多个zset进行Intersect时, 处理相同的item时, score的值会变为对应的score之和,如: RedisHelper.ZSetOps.zAdd("name1", "a", 1); RedisHelper.ZSetOps.zAdd("name1", "b", 100); 和R edisUtil.ZSetOps.zAdd("name2", "a", 2); edisUtil.ZSetOps.zAdd("name2", "c", 200); 对(name1和name2对应的)zset进行zIntersectAndStore之后,新的zset中的项a,对应的score值为3
case1: 交集不为空, storeKey不存在, 则 会创建对应的storeKey,并将交集添加到(storeKey对应的)ZSet中 case2: 交集不为空, storeKey已存在, 则 会清除原(storeKey对应的)ZSet中所有的项,然后将交集添加到(storeKey对应的)ZSet中 case3: 交集为空, 则不进行下面的操作, 直接返回0
key - 定位其中一个ZSet的键otherKey - 定位其中另一个ZSet的键storeKey - 定位(要把交集添加到哪个)ZSet的keypublic static long zIntersectAndStore(String key, Collection<String> otherKeys, String storeKey)
case1: 交集不为空, storeKey不存在, 则 会创建对应的storeKey,并将交集添加到(storeKey对应的)ZSet中 case2: 交集不为空, storeKey已存在, 则 会清除原(storeKey对应的)ZSet中所有的项,然后将交集添加到(storeKey对应的)ZSet中 case3: 交集为空, 则不进行下面的操作, 直接返回0
key - 定位其中一个set的键otherKeys - 定位其它set的键集storeKey - 定位(要把并集添加到哪个)set的keyCopyright © 2023 Irvingsoft. All rights reserved.