前些天为解决流失分页列表中item重复的问题查了很多资料,也得到了很多人指点,现将一些通用的解决方案记录一下,流式分页与传统pc网站上分页的区别就是当请求下一页数据的时候,之前请求的数据仍然回显示在列表上,因此当两次请求数据的排序有变动时,可能回出现数据重复或丢失现象,这里仅统计一些解绝数据重复的方法。
- 最大id限制(当然也可以不是id):没次给前端返回数据的时候,多返回一个当前列表的最大id字段,下次请求的时候将这个最大id在传给后端,后端根据最大id做判断,不返回id比当前最大id小的数据,这种方式一般只适用于没有排序要求的列表,也是最通用的解决方案
- 最后更新时间限制:这种方式和最大id的原理上是相同的,接口对没次请求返回当前时间,下次请求前端将这个时间传给接口,后端根据最后更新时间过滤在此之后有更新的数据;缺点:有可能导致数据显示不全
- 前端去重:这个就不必多说了,当然前端需要注意一下发起下一页请求的时机(我们最后也采用的这种方案)
还有人提出一些思路,需要接下来去思考验证 4. 做一个缓冲区,每次够一页的数据之后在返回给前端
5. 利用redis的zset
6. sql中使用union(这个是我是真的没有理解,链接 ,欢迎大家指点一二)
7. 加缓存(这个我认为解决不了问题)
8. 实在不行砍需求吧,别搞那么复杂的排序
利用 mysql 进 行分页,将所有的排序条件都传给客户端,并切条件中有唯一值,就能解决这个重复的问题