我正在实现MVC应用程序中的视图级别上的缓存。该应用程序是一个自定义的PHP MVC +一些zend库,但我认为这个问题将适用于任何MVC堆栈。是否有使用索引或标记的缓存库
我想达到的是缓存,使部分/块而不是整个页面失效。 视图由布局组成,每个布局可以由块/部分组成,每个部分本身可以再次由部分组成。没有什么不寻常的。许多部分使用相同的数据,如果他们的数据更改都应该失效。以同样的方式,一些分部使用来自不同模型的数据,并且如果任何数据改变,应该使其失效。
我想实现的是一个系统,我不必回到我的模型来更改代码,只要创建新的部分或布局。我的想法是,如果每个缓存项目都可以“标记”,那么当我处于数据级别时,我可以简单地使用该标签使所有缓存项目失效。如果我然后创建一个新的部分,我只需要确保使用该缓存块中使用的所有标记对它进行标记。
我可以想象,你会存储一个索引缓存链接一个标签与所有相关CacheId的。
问题1:这样的图书馆是否存在?我不想重新发明轮子。
问题2:OR是否有不同的“最佳实践”,是我的推理有缺陷。
阐述:
对面这是接近我wan't实现来了,但是在PHP http://37signals.com/svn/posts/3112-how-basecamp-next-got-to-be-so-damn-fast-without-using-much-client-side-ui
我的问题是我怎么缓存键映射到数据,以便当数据更新我知道哪些缓存无效?缓存键设置在视图中,清除在模型中完成(onSave,onDelete)。模型如何知道应该删除哪些缓存?
例如:
以下是在视图缓存,每个生成用于检索的唯一密钥。
部分1:由用户Y
乘积x = partial1/x.id-y.id由用户Y
产物Z = partial1/z.id-y.id
我使用相同的用户再次,但这次征求意见
部分2:
评论一个由用户Y = partial2/a.id-y.id
由用户 注释b Y形= partial2/b.id-y.id
现在,如果我更新用户y,在onSave中,我无法知道所有依赖y的缓存部分。我可以,但是我必须检索所有缓存键,并且如果y在其中,则一个接一个地进行测试。
所以我的想法是,如果我保持一个地图,关键取决于y.id,我可以很容易地清除缓存而不必知道什么键被命名。视图级别填充索引,模型可以使用它来查找键并使这些缓存无效。所以在上面的例子中,创建缓存后,我将有以下指标:
x.id = [partial1/x.id-y.id]
z.id = [partial1/z.id-y.id]
a.id = [partial2/a.id-y.id]
b.id = [partial2/b.id-y.id]
y.id = [partial1/x.id-y.id, partial1/x.id-y.id, partial1/z.id-y.id,
partial2/a.id-y.id, partial2/b.id-y.id]
我阐述的问题,希望这清除了我想要实现的。 – 2012-03-14 16:09:52