2

我最近遇到了与多层架构相关的短语“多层缓存”,但没有对这种缓存是什么(或如何使用它)做出有意义的解释。

对该短语的相关在线搜索也没有真正找到任何东西。我的解释是为某些 n 层 Web 应用程序的所有层提供缓存。可能是一个分布式缓存,每一层都有一个缓存节点。

以前有没有遇到过这个词?我对吗?走开?

4

2 回答 2

2

我知道这是旧的,但我想我会在这里折腾我的两分钱,因为我已经编写了几个多层缓存,或者至少几个迭代。

考虑一下;每个应用程序都有不同的层,并且在每一层都可以缓存不同形式的信息。每个缓存项通常会由于两个原因之一过期,一段时间已过期,或者依赖项已更新。

对于这个解释,让我们假设我们有三层:

  1. 模板(对象定义)
  2. 对象(完整的对象缓存)
  3. 块(部分对象/块缓存)

每个层都依赖于它的父层,我们将使用某种形式的依赖分配来定义它们。所以块依赖于依赖于模板的对象。如果一个 Object 被改变,Block 中的任何依赖都会被清除和刷新;如果模板被更改,任何对象依赖项都将被删除,进而删除任何块,并且所有内容都将被刷新。

有几个好处,较长的过期时间是一个很大的好处,因为依赖项将确保在更新父级时更新下游资源,因此您不会获得过时的缓存资源。单独的块缓存有很大帮助,因为缺少整个页面缓存(需要 AJAX 或 Edge Side Includes 以避免缓存动态内容),块将是最接近最终用户浏览器/界面的元素,并且可以节省大量的预处理循环。

像这样的多层缓存中的复杂之处在于它通常不能依赖于纯粹基于数据库的外键清除,除非每一层与其父级的关系是 1:1(即块将仅依赖于单个对象,它依赖于单个模板)。您必须以编程方式解决相关资源的清除问题。您可以通过数据库中的存储过程来执行此操作,如果您想动态地使用删除规则,也可以在应用程序层中执行此操作。

希望对某人有所帮助:)


编辑: 我应该补充一点,这些层中的任何一个都可以在可扩展的环境中进行集群、分片或其他方式,因此该模型适用于小型和大型环境。

于 2015-10-15T17:20:19.540 回答
1

在玩了几个星期 EhCache 之后,仍然不完全清楚他们所说的“多层”缓存是什么意思。我将跟进我所解释的隐含含义;如果在任何时候有人出现并且知道其他情况,请随时回答,我会删除这个。

多层缓存似乎是一种复制和/或分布式缓存,位于n 层架构中的 1 层以上。它允许多层上的组件访问相同的缓存。在 EhCache 中,使用复制或分布式缓存架构并结合简单地从多个层引用相同的缓存服务器来实现这一点。

于 2012-01-11T14:13:40.487 回答