缓存失效
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.1,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
缓存失效
缓存失效是删除与模型状态更改相关的所有缓存项的过程。最基本的无效是直接删除项。但是,当一个主资源的状态分散到多个缓存项时,保持它们同步可能会很困难。
Symf欧宝娱乐app下载地址ony Cache组件提供了两种机制来帮助解决这个问题:
- Tags-based失效用于管理数据依赖关系;
- 基于失效的过期对于与时间相关的依赖项。
使用缓存标签
为了从基于标记的无效中获益,需要将适当的标记附加到每个缓存项。每个标记都是一个普通的字符串标识符,您可以在任何时候使用它来触发删除与该标记关联的所有项。
要将标记附加到缓存项,需要使用标签()由缓存项实现的方法,由缓存适配器返回:
1 2 3 4 5 6
$项=$缓存->getItem (“cache_key”);/ /……//添加一个或多个标签$项->标记(“tag_1”);$项->标签([“tag_2”,“tag_3”]);$缓存->保存($项);
如果美元的缓存
实现了TagAwareAdapterInterface,可以通过调用使缓存项无效invalidateTags ():
1 2 3 4 5 6 7 8
//使所有与' tag_1 '或' tag_3 '相关的项无效$缓存->invalidateTags ([“tag_1”,“tag_3”]);//如果你知道缓存键,你也可以直接删除该项$缓存->deleteItem (“cache_key”);//如果你不记得项目键,你可以使用getKey()方法$缓存->deleteItem ($项->getKey ());
当跟踪缓存键变得困难时,使用标签无效非常有用。
标签感知适配器
属性包装缓存适配器,以存储标记TagAwareAdapter类或实现TagAwareAdapterInterface这是唯一的invalidateTags ()方法。
的TagAwareAdapter类实现瞬时失效(时间复杂度为O (N)
在哪里N
无效标记的数量)。它需要一个或两个缓存适配器:第一个必需的适配器用于存储缓存项;第二个可选选项用于存储标记及其失效版本号(概念上类似于它们的最新失效日期)。当只使用一个适配器时,项目和标记都存储在同一个地方。通过使用两个适配器,你可以在文件系统或数据库中存储一些大的缓存项,并在Redis数据库中保留标签来同步所有的front,并进行非常快速的无效检查:
1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址\组件\缓存\适配器\TagAwareAdapter;使用欧宝娱乐app下载地址\组件\缓存\适配器\FilesystemAdapter;使用欧宝娱乐app下载地址\组件\缓存\适配器\RedisAdapter;$缓存=新TagAwareAdapter (//缓存项的适配器新FilesystemAdapter (),//标签适配器新RedisAdapter (复述:/ / localhost的));
请注意
从Symfo欧宝娱乐app下载地址ny 3.4开始,TagAwareAdapter实现了PruneableInterface,启用手动删除过期的缓存项通过调用删除()方法(假设包装的适配器本身实现了PruneableInterface).