解决前端获取下一页,列表数据重复
Contents
场景:
前端加载更多,列表数据会重复,但又不是必现。刷新后数据又正常了
经过测试,发现是加载更多时,有新纪录插入数据库,导致返回给前端一条上一页数据。
需求:
用户端可以发表一条记录,列表是根据发表时间倒序
过程分析:
倒序获取20条数据sql写法。pageSize=20,总条数22条,那就会返回第3到22这20条数据
|
|
这时候再插入一条数据,总条数变成23条,前端请求下一页数据。就会返回第1到3条,第3条就是重复数据
|
|
调整:
前端请求的时候,携带上次返回的最大id,以此限制下一页数据id范围。sql的where中加 id < 上次返回最大id,同时offset也不需要了,因为offset也会限制数据范围
前端在数据总条数比当前已经返回的数据条数大的时候,可以继续加载更多。所以返回给前端的数据总条数也需要调整。sql的where中加 id < 第一页返回的最大id,这个id在加载更多时是不变的,这样新插入的数据就不会影响列表数据,第一次请求的时候,后端可以根据page==1,设置一个最大值,比如math.MaxInt64
适用场景:
这种解决方法适用于倒序且频繁更新数据的列表。参考了微信朋友圈的做法
Author cm
LastMod 2021-02-24