首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计缓存系统的更好实践

设计缓存系统的更好实践
EN

Stack Overflow用户
提问于 2015-08-03 17:11:32
回答 3查看 87关注 0票数 0

我将为我的项目创建一个集群。

我搞不懂我应该在我的系统上采用哪种策略。

有许多Web App服务器和database服务器。

查询需要几秒钟才能完成。

因此,我更愿意尽可能多地使用缓存。

该集群在AWS上处于弹性伸缩控制之下。

那么,我是不是应该把所有的缓存都放在redis server中,让所有的Web app都能访问它呢?

EN

回答 3

Stack Overflow用户

发布于 2015-08-03 19:43:17

这不是一劳永逸地解决缓存问题的灵丹妙药。缓存是一系列提高性能的技术。

其中一些最重要的技术是:

  • E-tags (客户端捕获,如果不需要就不要创建新的响应)。
  • fragment使用负载均衡器中的http加速器缓存
  • ,如SquidVarnish

(http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching) -避免昂贵的渲染操作- Model caching

缓存的实际存储位置在一定程度上取决于缓存的类型。

在某些情况下,将缓存存储在共享的Redis服务器中可能会带来更好的性能,因为访问冷缓存的请求会更少。但是,从缓存服务器跨网络传输数据比在单个应用程序服务器上传输数据要慢。

总是需要考虑权衡。

票数 2
EN

Stack Overflow用户

发布于 2015-08-08 00:36:29

麦克斯说的是唯一正确的答案:没有正确的答案。

缓存的目的是限制发送到服务器的可行请求的数量。我通常做的是:

  1. 使响应成为单一责任(真正的REST)。
  2. 允许所有需要新数据的请求(如配置文件、用户等)通过varnish/squid进行
  3. 缓存,尽可能多的请求可能包含过时数据。
  4. 使用ETags on rails来允许应用程序在请求通过清漆/squid缓存时决定是否需要执行额外的工作。
  5. 尽可能在应用程序上使用Redis/MemCached,以降低获取实时数据的成本。

再说一次,这需要权衡。陈旧的数据从来都不是100%好的。缓存是不能解决所有问题的创可贴。它只能帮助减少损害(访问服务器的成本)。

票数 1
EN

Stack Overflow用户

发布于 2015-08-08 00:45:55

首先,如果不知道您的项目有什么类型的请求(即多个用户的共享数据与每个用户都有其独特的数据),就很难对缓存设置给出一个真正的建议。

如果查询需要几秒钟才能完成,您是否尝试过首先解决这个问题,并尝试对其进行优化?甚至可以将技术从MongoDB转换到常规的SQL存储?缓存只会在后续调用中起作用,而不会在第一个调用中起作用。

正如其他人所说,缓存在某些情况下可能会有所帮助,但是让redis启动并运行,并为rails应用程序的多个实例提供动力,这会增加设置的复杂性,而缓存策略只有在您重复访问相同的数据时才会有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31783508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档