龐大的數據量,前端展示往往會選擇分頁。但是在分頁獲取數據的時候,有新的數據插入,就會存在重復的問題。

案發現場,祖傳代碼MongDB,獲取視頻是分頁獲取的。分析下原因,比如每次獲取10條數據,按上傳時間倒序排列。
那么第一次獲取的數據是 10,9,8,7,6,5,4,3,2,1
在這個時間段有人上傳了數據12,11
那么在第二次分頁獲取數據的時候,倒序排列12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6 這樣 2,1 數據就重復了
解決思路,第一次分頁index =0的時候,存一個time,便於理解這里存一個id。第一次分頁查詢后存儲 10,以后每次分頁增加一個查詢條件 id < 10。
//這里用的redisson
RBucket<Object> bucket = redissonClient.getBucket(userId+"requestTime"); Object o = bucket.get() == null? 0 : bucket.get(); long requestTime = pageIndex == 0 ? 0 : Long.valueOf(String.valueOf(o));//第一次請求數據,取返回數據的第一條存入redis
...
if(pageIndex == 0){
bucket.set(data.get(0).getTime());
}
