我们在刷朋友圈或者微博的时候, 默认是显示了一部分, 当我们下拉的时候会动态展示出以后的内容
根据分数倒序排列
入参
key: 就是主键, 本次是userId
min: 最小分数. 本次用不上, 因为我们倒序查询, 有最大分数 和 count查询多少条就够了
max: 最大分数 倒序查询的起点
offset: 偏移量 如果偏移量是0, 就从此数据开始查(包含此数据), 1 从此数据后+1开始.以此类推…
count: 总共查询多少条
String userId = UserHolder.getUser().getId().toString();
/**
* rangeByScore参数:
* 1. key 主键
* 2. 分数最小值 因为本次分数是用的时间,倒叙 所以不用考虑最小值 ,填写0
* 3. 分数最大值 前端传过来的上次的最小时间
* 4. 偏移量 如果是0 就是<=. 如果是1 就是< 如果是2 就是比它小两个的 时间戳是不同的,所以不用考虑分数相同的情况
* 5. 总共查询几条
*/
Set<ZSetOperations.TypedTuple<String>> tuples = stringRedisTemplate.opsForZSet().reverseRangeByScoreWithScores(FEED_KEY + userId, 0, lastId, offset, 2);
if (tuples == null || tuples.isEmpty()) {
return Result.ok();
}
//计算下次偏移量
int targetOffset = 1;
//计算下次的开始分数
long targetLastTime = 0L;
ArrayList<Long> ids = new ArrayList<>();
for (ZSetOperations.TypedTuple<String> tuple : tuples) {
ids.add(Long.valueOf(tuple.getValue()));
long time = tuple.getScore().longValue();
if (time == targetLastTime) {
targetOffset++;
} else {
targetLastTime = time;
targetOffset = 1;
}
}