3

我意识到这可能是一个模糊的问题,遗传了一个模糊的答案,但我需要一些真实世界的例子,想法,或为Web应用程序缓存数据的最佳实践。我读过的所有例子本质上都是技术性较强的(如何从相应的缓存存储中添加或删除缓存数据),但我无法找到更高级别的缓存策略。什么应该存储在缓存中的Web应用程序?

例如,我的web应用程序为每个用户都有一个收件箱/邮件功能。我一直在做的是将典型的会话数据存储在缓存中。在这个例子中,当用户登录时,我转到数据库并检索用户的邮件并将它们存储在缓存中。我开始怀疑我是否应该始终在缓存中维护所有用户邮件的副本,并在需要时从缓存中检索它们,而不是在登录时从数据库加载。我有一堆登录时加载的其他数据(产品目录和相关实体),登录速度开始放慢。

所以我想我的问题是社区,你会做什么/推荐作为在这种情况下的方法?

谢谢。

+0

试着看看这个网站上的一些文章,他们解释了高层缓存的一些不同方面http://developer.att.com/developer/forward.jsp?passedItemId=9700192 –

回答

4

这可能是更适合于https://softwareengineering.stackexchange.com/,但一般要缓存:

不经常更改
  • 元/配置数据。例如。国家/州列表,外部资源地址,逻辑/分支设置,产品/价格/税收定义等。
  • 检索或生成成本高且无需频繁更改的数据。例如。报告的历史数据集。
  • 当前用户会话唯一的数据。

上面的最后一项是您需要小心的地方,因为您可以通过为每个活动会话的数据添加几兆字节来大幅增加应用的内存使用量。这也意味着不同级别的缓存 - 应用程序范围,用户会话等。

通常,您不应该缓存处于活动更改状态的数据。

在较大的系统中,您还需要考虑缓存的位置。是否有可能有一个中央缓存服务器,还是每个服务器/进程足以处理它自己的缓存?

另外:你应该有一些方法来快速重置/无效的缓存数据。对于较小或较少的关键任务应用程序,这可能与重新启动Web服务器一样简单。对于我所处理的大型系统,我们使用大多数缓存数据的12小时绝对到期时间窗口,但是如果需要,我们可以强制立即到期。

这是一个非常广泛的问题,答案很大程度上取决于您正在构建的特定应用程序/系统。我不太了解你的具体情况,说你是否应该缓存所有用户的消息,但本能地看来,这似乎是一个坏主意,因为你似乎有效地缓存你的整个数据集。如果新消息进入或被删除,这可能会导致问题。你会在缓存中更新它们吗?这不会简单地复制后台存储吗?

缓存只是一种性能优化技术,与任何优化一样,在进行实质性更改之前首先测量,以避免浪费时间优化错误的事情。也许你不需要太多的缓存,它只会让你的应用程序变得复杂。也许您正在考虑缓存的数据可以以更快的方式检索,或者更少的数据可以立即检索。

2

缓存导致重复数据库查询的任何内容。

相关问题