缓存失效
编辑本页缓存失效
缓存失效是删除与模型状态更改相关的所有缓存项的过程。最基本的无效类型是直接删除项。但是,当一个主资源的状态分散到多个缓存项时,保持它们同步可能会很困难。
Symfob娱乐下载ony Cache组件提供了两种机制来帮助解决这个问题:
- 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 ()方法。
请注意
当使用Redis后端时,考虑使用RedisTagAwareAdapter这是为了这个目的而优化的。当使用文件系统时,同样考虑使用FilesystemTagAwareAdapter.
的TagAwareAdapter类实现瞬时失效(时间复杂度为O (N)
在哪里N
无效标记的数量)。它需要一个或两个缓存适配器:第一个必需的适配器用于存储缓存项;第二个可选选项用于存储标记及其失效版本号(概念上类似于它们的最新失效日期)。当只使用一个适配器时,项目和标记都存储在同一个地方。通过使用两个适配器,你可以在文件系统或数据库中存储一些大的缓存项,并在Redis数据库中保留标签来同步所有的front,并进行非常快速的无效检查:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\缓存\适配器\FilesystemAdapter;使用ob娱乐下载\组件\缓存\适配器\RedisAdapter;使用ob娱乐下载\组件\缓存\适配器\TagAwareAdapter;$缓存=新TagAwareAdapter (//缓存项的适配器新FilesystemAdapter (),//标签适配器新RedisAdapter (复述:/ / localhost的));
请注意
TagAwareAdapter实现了PruneableInterface,启用手动删除过期的缓存项通过调用删除()方法(假设包装的适配器本身实现了PruneableInterface).