【问题标题】:What is a multi-tier cache?什么是多层缓存?
【发布时间】:2012-01-26 06:05:20
【问题描述】:

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

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

SO 以前有没有遇到过这个词?我对吗?远吗?

【问题讨论】:

  • 根据上下文,您可能正在寻找类似 @​​987654321@ 或 stackoverflow.com/questions/337072/… 的内容。
  • 这是 EhCache 人员使用的术语,如果有帮助的话(作为来源)。谢谢!

标签: caching multi-tier


【解决方案1】:

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

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

为了这个解释,让我们假设我们有三层:

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

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

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

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

希望对某人有所帮助:)


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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 2017-04-12
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多