缓存失效
编辑该页面缓存失效
缓存失效删除所有缓存条目的过程相关的变化的状态模型。最基本的失效是直接项目删除。但当主要资源的状态分布在多个缓存条目,让他们保持同步是很困难的。
Symfob娱乐下载ony缓存组件提供两种机制来帮助解决这个问题:
- Tags-based失效用于管理数据的依赖关系;
- 基于过期失效与时间相关的依赖关系。
使用缓存的标签
受益于tags-based失效,你需要适当的标签附加到每个缓存项。每个标记是一个普通的字符串标识符,您可以使用在任何时间触发的所有项目与这个标签。
贴标签的缓存条目,您需要使用标签()方法所实现的缓存条目:
1 2 3 4 5 6 7 8
美元项=美元缓存- >get (“cache_key”,函数(ItemInterface美元项){/ / […]/ /添加一个或多个标记美元项- >标记(“tag_1”);美元项- >标签([“tag_2”,“tag_3”]);返回美元cachedValue;});
如果美元的缓存
实现了TagAwareCacheInterface,您可以通过调用缓存条目无效invalidateTags ():
1 2 3 4 5
/ /无效所有项目相关的“tag_1”或“tag_3”美元缓存- >invalidateTags ([“tag_1”,“tag_3”]);/ /如果你知道缓存键,你也可以直接删除条目美元缓存- >删除(“cache_key”);
使用标签失效非常有用当跟踪缓存键变得困难。
标签意识到适配器
存储标签,需要用适配器的一个缓存TagAwareAdapter类或实现TagAwareCacheInterface和它的invalidateTags ()方法。
请注意
当使用复述,后端,考虑使用RedisTagAwareAdapter这是为此目的而进行了优化。当使用文件系统,使用同样的考虑FilesystemTagAwareAdapter。
的TagAwareAdapter类实现瞬时失效(时间复杂度O (N)
在哪里N
是无效的数量标签)。它需要一个或两个缓存适配器:首先需要一个用于存储的缓存条目;第二个可选一个用于存储标签及其失效版本号(概念上类似于他们最新的失效日期)。当只使用一个适配器,物品和标签都是存储在同一个地方。通过使用两个适配器,您可以如一些大的缓存条目存储在文件系统或数据库中并保持标签在复述,数据库同步所有方面,很快失效检查:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\缓存\适配器\FilesystemAdapter;使用ob娱乐下载\组件\缓存\适配器\RedisAdapter;使用ob娱乐下载\组件\缓存\适配器\TagAwareAdapter;美元缓存=新TagAwareAdapter (/ /适配器的缓存条目新FilesystemAdapter (),/ /适配器标签新RedisAdapter (复述:/ / localhost的));
请注意
TagAwareAdapter实现了PruneableInterface,使手动修剪的过期的缓存条目通过调用它的删除()包装方法(假设适配器本身实现的PruneableInterface)。