gpt4 book ai didi

postgresql - 经常更新的最佳缓存策略数据(Redis/Memcached vs Nginx/Varnish vs Materialized view)

转载 作者:IT王子 更新时间:2023-10-29 06:10:40 26 4
gpt4 key购买 nike

我目前正在运行一个 AWS EC2 Ubuntu 服务器,该服务器从 Postgres RDS 数据库实例中获取数据。在特定页面的 View 函数中使用的 SQL 查询之一有很多连接,运行速度很慢。我试图减少查询并删除一些可能有点不必要的连接,但它仍然需要比预期更长的时间来加载(至少 6 秒)。我目前正在研究潜在的缓存策略以帮助加快页面服务。

我考虑过使用物化 View ,但是原始 View 函数获取的数据平均每 30 秒更新一次,我担心实现触发器或常规 cron 作业来刷新 MatView 这通常需要它对数据库造成的损失,并且可能不是定期更新和更改的数据的最佳策略(除非有人可以建议另一种更新 MatView 中的行的方法,该方法不涉及运行看起来与原始查询非常相似的查询)

到目前为止,我已经在 Elasticache 实例上测试了 Redis,对其工作方式印象深刻,但我也被推荐查看 Nginx 和 Varnish 缓存策略。

我有点困惑哪种缓存策略最适合这种情况。与在 EC2 实例上实现 Nginx/Varnish 相比,Elasticache 实例上的 Redis/Memcached 是否有点过于重量级?在 Nginx 缓存中尝试缓存经常更改的数据是否被认为是一个坏主意?

最佳答案

粗略地说,您会使用像 Redis 或 Elasticache 这样的低级缓存来缓存原始数据(例如 SQL 查询的结果);而您将使用更高级别的缓存(如 Nginx 或 Varnish)来缓存显示数据的整个 HTML 页面。因此,哪个合适在某种程度上取决于您的用例。如果您有一个包含慢速数据的简单页面(或页面片段),并且该内容对所有用户显示相同,那么高级缓存可能是合适的。如果内容受到许多小的调整和重新格式化,这会使整个页面缓存非常零散,那么较低级别的缓存将是合适的。

实际上,这些技术并没有与高/低分离紧密相关:您可以将整个页面存储在 Redis 中,而将单个数据片段存储在 Varnish 中,所以并没有那么简单。但总的来说,在决定如何缓存它之前先决定要缓存什么。

即使您已经决定要缓存什么内容,选择正确的技术也将取决于很多考虑因素。 AWS 上的 Elasticache 具有完全托管的优势,因此可以节省您的维护费用,但运行成本可能最高(至少在小/中型规模上)。带有文件系统后端的 Nginx 缓存可能是最快和最便宜的实现方式,但不会很好地扩展(并且随着规模的增加重构会很尴尬)。 Varnish 和 Redis 可能最好作为单独的 EC2 实例实现,因此请介于两者之间。

关于postgresql - 经常更新的最佳缓存策略数据(Redis/Memcached vs Nginx/Varnish vs Materialized view),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52482719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com