Caching web应用程序的缓存中应该存储什么?

Caching web应用程序的缓存中应该存储什么?,caching,web-applications,optimization,memcached,azure-caching,Caching,Web Applications,Optimization,Memcached,Azure Caching,我意识到这可能是一个模糊的问题,也可能会留下一个模糊的答案,但我需要一些真实世界的例子、想法和/或为web应用程序缓存数据的最佳实践。我读过的所有示例本质上都是技术性的(如何从各自的缓存存储中添加或删除缓存数据),但我还没有找到更高级别的缓存策略 例如,“我的web应用”为每个用户都提供了收件箱/邮件功能。到目前为止,我一直在做的是在缓存中存储典型的会话数据。在本例中,当用户登录时,我转到数据库,检索用户的邮件消息并将其存储在缓存中。我开始怀疑我是否应该一直在缓存中维护所有用户消息的副本,并在需

我意识到这可能是一个模糊的问题,也可能会留下一个模糊的答案,但我需要一些真实世界的例子、想法和/或为web应用程序缓存数据的最佳实践。我读过的所有示例本质上都是技术性的(如何从各自的缓存存储中添加或删除缓存数据),但我还没有找到更高级别的缓存策略

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

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


谢谢。

这可能更适合,但通常您希望缓存:

  • 不经常更改的元数据/配置数据。例如国家/州列表、外部资源地址、逻辑/分支设置、产品/价格/税收定义等
  • 检索或生成成本高昂且不需要频繁更改的数据。例如,报告的历史数据集
  • 当前用户会话唯一的数据
上面的最后一项是你需要小心的地方,因为你可以通过在每个活动会话的数据中添加几兆字节来大幅增加应用程序的内存使用。它还意味着不同级别的缓存——应用程序范围、用户会话等

通常,您不应该缓存正在进行活动更改的数据

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

另外:您应该有一些方法来快速重置/使缓存数据无效。对于较小或不太关键的应用程序,这可以像重新启动web服务器一样简单。对于我工作的大型系统,我们对大多数缓存数据使用12小时绝对过期窗口,但如果需要,我们有一种强制立即过期的方法

这是一个非常广泛的问题,答案在很大程度上取决于您正在构建的特定应用程序/系统。我对您的特定场景了解不够,无法确定是否应该缓存所有用户的消息,但从本能上看,这似乎是个坏主意,因为您似乎在有效地缓存整个数据集。如果新邮件传入或被删除,这可能会导致问题。然后你会在缓存中更新它们吗?这不是简单地复制备份存储吗


缓存只是一种性能优化技术,与任何优化一样,在进行实质性更改之前先进行测量,以避免浪费时间优化错误的内容。也许你不需要太多的缓存,这只会使你的应用程序复杂化。可能您正在考虑缓存的数据可以更快地检索,或者可以一次检索到更少的数据。

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

试着看看本网站上的一些文章,它们从较高的层次解释了缓存的一些不同方面