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。

代码就不放了,写给自己看的

经验分享 程序员 微信小程序 职场和发展