虽然使用过很多的feed流产品了,但是无限加载这个名词还是第一次听
概念
分析朋友圈分页,按照时间倒序查10条,查出来数据后按照权限过滤,比如什么拉黑,删除等等,这样的话,返回给客户端的数据和分页数量不一致,但是我个人认为应该是这样的,而不是把各种权限信息和动态表连接起来查询,然后可以返回固定数量的动态,大厂肯定不会这么做,权限信息和动态信息不是一个数量级,不能连表,微博也有佐证:
https://open.weibo.com/wiki/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98?sudaref=www.google.com
(5)有时某一页返回的数据要小于“count”指定的数量?
count是指每页返回的数量,比如设置为10条,当显示8条时是因为那两条被过滤掉了,再次访问又变成10条了,是因为索引数据库是动态的,它会将过滤掉的信息挤到下一页或者之后的页面。
明显的说了,查了10条,但是有2条被过滤掉了,还有下一条
(6)每页返回的微博数量总和与total_number不一致?
实际返回的结果数与total_num不符,这个现象是正常的。原因是索引中的数据都是入库时的原始数据,后端会返回命中的微博,但是前段会根据微博的实时状态进行过滤,比如有些微博被删除、命中敏感词、用户被封等。
再看另一个问题,需要实时刷新的数据如果按传统的分页肯定会出现两页有相同数据,所以需要id或者时间字段作为起始条件范围
同样看微博:
(8) 如何使用时间参数,尽量搜到最全数据?
结束时间参数的值指定为当前时间,起始时间无需指定,将按时间倒序分页返回1000条微博,再将第1000条微博的创建时间作为结束时间参数的值,起始时间无需指定,依次递推。
https://open.weibo.com/wiki/2/statuses/home_timeline
有max_id参数,若指定此参数,则返回ID小于或等于max_id的微博,默认为0
至于实际业务中按照哪个字段当范围,应该考虑该字段在数据库中的索引等,或者是在redis中的排序等
如果是redis中,如何分页,主要看怎么存储的
mysql中如何分页