2011-12-22 79 views
1

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

该短语的相关在线搜索也不会真正发生任何事情。我的解释将是一个缓存服务于某些n层web应用程序的所有层。也许是每层都有一个缓存节点的分布式缓存。

曾经有过这个词吗?我对吗?离开?

+0

根据上下文,你可能在寻找像http://stackoverflow.com/questions/3699582/what-is-the-difference-between-l1-cache-and-l2-cache或http: //stackoverflow.com/questions/337072/what-is-first-and-second-level-caching-in-hibernate。 – ziesemer 2011-12-22 16:10:30

+0

这是EhCache人们使用的术语,如果有帮助的话(作为源代码)。谢谢! – IAmYourFaja 2011-12-22 17:06:54

回答

1

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

多层缓存似乎是一个复制和/或分布式缓存,它位于一个n层体系结构中的1+层上。它允许多层中的组件访问相同的缓存。在EhCache中,将复制或分布式缓存架构与简单地引用来自多个层的相同缓存服务器结合使用可以实现此目的。

0

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

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

对于此说明,让假设我们有三层:

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

每个图层都依赖于它的父级,我们将使用某种形式的依赖性分配来定义这些图层。所以块取决于依赖于模板的对象。如果一个对象改变了,Block中的任何依赖关系都会被清除并刷新;如果更改了模板,则将删除任何对象依赖关系,然后删除任何块,并刷新所有对象。

有几个好处,很长的到期时间是一个很大的好处,因为依赖关系将确保下载资源随着父母更新而更新,因此您不会得到过时的缓存资源。块缓存本身是一个很大的帮助,因为缺少整个页面缓存(需要AJAX或Edge Side Includes来避免缓存动态内容),块将成为最终用户浏览器/界面的最接近元素,并且可以节省预加工周期。

像这样的多层缓存中的复杂情况是,它通常不能依赖纯粹的基于数据库的外键删除,也就是说,除非每个层相对于其父层为1:1(即块将仅依赖于依赖于单个模板的单个对象)。您必须以编程方式解决从属资源的清除问题。您可以通过数据库中的存储过程或者在应用程序层中执行此操作,以便动态处理清除规则。

希望帮助别人:)


编辑:我要补充,这些层中的任何一个可以集群,碎片化,或以其他方式在规模的环境,所以这种模式在小型工程和大环境。