最近在做一个评论分页的实际问题
假设以点赞数排序, 有page_index ,以及 每个评论有个id
我们假设以每一页的最后一个id在zset中的rank作为left , rank+page_size 为right, 那么
对于实时的分页来说,存在这么一个问题
假设前端已经获取了列表1:
comment-1
comment-2
comment-3
comment-4
comment-5
当c5 和 c4 的位置发生了变换时,c4 会重复出现一次,这是问题1
假设有
page_1:
c1
c2
c3
c4
c5
page_2:
c6
c7
c8
c9
c10
现在假如c5 和c8交换了位置,那么c6、c7 就丢失掉了。这是问题2
同理如果只以page_index 和 page_index 分页也会有类似的问题
想了一个解决方案:我们必须引入 点赞数x,且需要对点赞数相同的评论做一个id的排序
前端需要传一个id + 点赞数x,
我们需要维护的数据结构是: 点赞数第一优先级、id作为第二优先级(简单的实现方式可以是 score=点赞数.id )
获取到x 之后,我们可以先判断这个点赞数的位置,再根据id 去往后筛选page_size 个评论。
但这样存在一个问题就是:
如果该评论c5被取消点赞了,导致排名下降了很多,那么他在后面又会出现一次,如果是在page_index +