Python 有没有办法在Flask中缓存特定用户的数据库条目

Python 有没有办法在Flask中缓存特定用户的数据库条目,python,python-3.x,flask,flask-sqlalchemy,python-3.8,Python,Python 3.x,Flask,Flask Sqlalchemy,Python 3.8,因此,我正在帮助为一个应用程序制作一个FlaskAPI,允许用户与其他人分享他们在应用程序上的创作。我们想要实现的事情之一是,用户可以通过上传到服务器上的最新创作进行排序。目前,我们只是让API在上传结果时对结果进行排序,并对这些结果进行分页 问题是,如果用户请求获取最新创作的第1页,并在那里停留足够长的时间,以便将更多内容上载到服务器,在转到第2页之前,某些创作可能会被推回,导致用户多次看到相同的内容。最好的办法是什么 对不起,如果这是不清楚,或如果标题是不准确的。我很难用文字表达这个问题,所

因此,我正在帮助为一个应用程序制作一个FlaskAPI,允许用户与其他人分享他们在应用程序上的创作。我们想要实现的事情之一是,用户可以通过上传到服务器上的最新创作进行排序。目前,我们只是让API在上传结果时对结果进行排序,并对这些结果进行分页

问题是,如果用户请求获取最新创作的第1页,并在那里停留足够长的时间,以便将更多内容上载到服务器,在转到第2页之前,某些创作可能会被推回,导致用户多次看到相同的内容。最好的办法是什么


对不起,如果这是不清楚,或如果标题是不准确的。我很难用文字表达这个问题,所以如果需要,我很乐意尝试澄清。

一个潜在的解决方法是基于光标的分页。在大多数分页问题中,要求
从项目编号100开始,给我10个项目,您将得到如下SQL查询

选择*
发帖
...
通过在DESC上邮寄的方式订购
限制10
偏移量100
此查询获取所有文章,对其排序,减去前100个值,然后应用限制仅获取10行。现在,如果有很多新帖子,这可能会导致一篇帖子出现在第1页,然后当你转到第2页时,你会再次看到同一篇帖子。为什么?数据库中有一篇新文章,将这篇文章推到第11位,从而推到第二页。另一个问题是,对于更多的页面(比如说1001000页),速度会变慢

使用基于光标的分页,您将无法转到特定页面,而只允许用户转到下一页或上一页。不同之处在于,您将在页面上最后一个项目的
日期与请求一起发送
posted\u,该请求实质上变成了
在日期x
之前向我发送前10个项目

在SQL中:

选择*
发帖
...
张贴于<'2020-09-01 00:00:05'
通过在DESC上邮寄的方式订购
限制10
这有一个小问题。如果两篇文章在同一时间发布,那么这个人可能会错过一篇,如果它是第1页上的11号并且被剪掉了,但是它并没有严格地小于在第10篇文章发布日期发布的

解决方法是使用
id
s,前提是您可以保证它们总是在增加。所以,如果拥有更高的ID意味着它总是更新的,那么你可以这样做。否则,您也可以使用
id
posted\u的组合。这样一来,
id
s是否增加并不重要,因为它使顺序具有确定性。我的意思是,如果你有两篇文章同时使用相同的posted_,但是B的
id
比a高,那么如果a是本页的最后一个,它将始终显示在下一页上。SQL:

选择*
发帖
...
其中(发布于<'2020-09-01 00:00:05'
或(发布于'2020-09-01 00:00:05'且id>1500))
通过在DESC,id上发布的订单
限制10

我会注意到,许多网站(包括这一个!)都存在这个问题,因此不会试图解决这个问题。除非有人真的向你的应用程序发送新内容的垃圾邮件,否则这只是一个小小的不便。您可以维护某种状态(例如,上次看到的内容的id)并使用它来限制来自数据库的结果,但这在实践中可能会很棘手或性能不高。为了防止这种情况,一些站点会在客户端动态加载数据。因此,当用户浏览时,更多内容将显示在顶部,而无需重新加载页面。这不会解决问题,但会让用户理解为什么他们在下一页上看到相同的内容。