Web后端如何应对分页器的永恒挑战?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2314个文字,预计阅读时间需要10分钟。
分页器是Web开发中常见的功能,看似简单却隐藏着各种奇妙的问题。堪称WEB后端开发的一生之敌。常见问题包括:翻页边写入导致内容重复、某位用户正在浏览我的博客,他看到的第一页是……
分页器是 Web 开发中常见的功能,看似简单的却经常隐藏着各种奇怪的坑,堪称 WEB 后端开发的一生之敌。
常见问题 边翻页边写入导致内容重复某位用户正在浏览我的博客,他看到第一页最后一篇文章是 《Redis 缓存更新一致性》:
在他浏览第一页的过程中,我发布了一篇新文章。他继续浏览,发现第二页的第一篇文章仍然是 《Redis 缓存更新一致性》:
自由互联使用的是时间倒序排列和limit..offset分页器,用 SQL 来描述就是:
select * from posts where user_id = ? order by publish_time desc limit 10 offset 10;
在用户浏览第一页时《Redis 缓存更新一致性》按时间倒序排列在第 10 位,当发布新文章后它被挤到了第 11 位。读者使用 limit 10 offset 10 查询第二页时它便会再次出现。
上述情况只是在浏览过程中在头部追加了新的数据,在搜索引擎这类条件很多、排序算法复杂的场景中,第一次查询和第二次查询的顺序可能完全不同,分页器也难以实现。
后置过滤一般情况下我们可以使用 where 语句过滤出我们需要的记录,然而在工作中也经常碰到 MySQL 不能完成所有过滤的情况。
本文共计2314个文字,预计阅读时间需要10分钟。
分页器是Web开发中常见的功能,看似简单却隐藏着各种奇妙的问题。堪称WEB后端开发的一生之敌。常见问题包括:翻页边写入导致内容重复、某位用户正在浏览我的博客,他看到的第一页是……
分页器是 Web 开发中常见的功能,看似简单的却经常隐藏着各种奇怪的坑,堪称 WEB 后端开发的一生之敌。
常见问题 边翻页边写入导致内容重复某位用户正在浏览我的博客,他看到第一页最后一篇文章是 《Redis 缓存更新一致性》:
在他浏览第一页的过程中,我发布了一篇新文章。他继续浏览,发现第二页的第一篇文章仍然是 《Redis 缓存更新一致性》:
自由互联使用的是时间倒序排列和limit..offset分页器,用 SQL 来描述就是:
select * from posts where user_id = ? order by publish_time desc limit 10 offset 10;
在用户浏览第一页时《Redis 缓存更新一致性》按时间倒序排列在第 10 位,当发布新文章后它被挤到了第 11 位。读者使用 limit 10 offset 10 查询第二页时它便会再次出现。
上述情况只是在浏览过程中在头部追加了新的数据,在搜索引擎这类条件很多、排序算法复杂的场景中,第一次查询和第二次查询的顺序可能完全不同,分页器也难以实现。
后置过滤一般情况下我们可以使用 where 语句过滤出我们需要的记录,然而在工作中也经常碰到 MySQL 不能完成所有过滤的情况。

