背景
当后台对商品进行大规模更新时,如插入大量商品时,分页查询点击下一页时会因为新增商品的插入从而显示上一页的重复内容。
例子
数据库目前两条商品数据,按照添加时间进行排序 用户进行分页查询调用查询接口显示第一页两条内容,此时后台新加入两个个商品后,用户查询第二页两条内容,由于数据库此时新增两条内容,此时调用接口查询接口返回的十条数据依旧是之前展示的两条内容。
解决办法
解决思路1
一次性返回符合条件的所有数据, 然后交给前端去分页, 此时前端拿到比如500条数据, 然后前端的分页就是数据展示的问题了, 而不再涉及到再次请求服务器, 因而就不会出现数据重复问题
但是, 分页的目的是为了减轻服务器请求的压力, 如果一次请求的数据量过大, 就会降低服务器的反应速度, 因此这个想法不太可行.
解决思路2
请求第1页时记录第1条数据(即最新的那条)的写入时间, 然后后面查询第2,3,4...页数据, 把记录的写入时间作为参数, 然后在sql语句中做限制
例如查询第2页, 设置写入时间小于等于2019-05-15 19:31:59, 这样即使有新数据插入, 也不在我们本次分页查询的范围内.
select * from table1 where write_time <=1557919919000 order by write_time desc limit 5,5