redis实现Feed流滚动分页
redis实现Feed流滚动分页
1.需求分析
通过对数据添加时的时间戳降序排序进行滚动分页,滚动分页角标会发生变化
2.数据结构
redis中的List和SortedSet可以实现分页
-
List 只能通过角标查询,可以实现按时间戳降序排序,即从最大角标开始分页,但角标会变化,会引发一些问题。 举个例子: 当前List中有角标分别为1,2,3,4,5,6的6条数据,page为1,size为5时分页显示出角标为6,5,4,3,2的数据,此时插入一条数据,List中数据为1,2,3,4,5,6,7,page为2,size为5时分页显示出角标为2,1的数据。 可以看出角标为2的数据重复展示了,所以List不能实现滚动分页。 SortedSet SortedSet可以通过 score进行排序,并且score代表的时间戳是不会变的,所以通过score可以进行滚动分页。
3.实现思路
redis命令为:
我们这里 max: 时间戳 min: 0 offset: 偏移量 count: 分页size
每次查询记录最小的score,记为lastId,下次查询时max处填写<=lastId的第一个score并进行查询,偏移量为上次查询结果中中与lastId相等的值的个数,保证上次查到的lastId均被排除。
这里注意: 第一次查询max为当前时间戳,offset为0,保证查到最大的score。
代码就不放了,写给自己看的