缓存失效

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.2,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

缓存失效

缓存失效是删除与模型状态更改相关的所有缓存项的过程。最基本的无效是直接删除项。但是,当一个主资源的状态分散到多个缓存项时,保持它们同步可能会很困难。

Symf欧宝娱乐app下载地址ony Cache组件提供了两种机制来帮助解决这个问题:

使用缓存标签

为了从基于标记的无效中获益,需要将适当的标记附加到每个缓存项。每个标记都是一个普通的字符串标识符,您可以在任何时候使用它来触发删除与该标记关联的所有项。

要将标记附加到缓存项,需要使用标签()由缓存项实现的方法:

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
使用欧宝娱乐app下载地址组件缓存适配器FilesystemAdapter使用欧宝娱乐app下载地址组件缓存适配器RedisAdapter使用欧宝娱乐app下载地址组件缓存适配器TagAwareAdapter缓存TagAwareAdapter (//缓存项的适配器FilesystemAdapter (),//标签适配器RedisAdapter (复述:/ / localhost的));

请注意

TagAwareAdapter实现了PruneableInterface,启用手动删除过期的缓存项通过调用删除()方法(假设包装的适配器本身实现了PruneableInterface).

使用缓存过期

如果数据仅在有限的一段时间内有效,则可以使用PSR-6接口指定它们的生命周期或过期日期,如缓存项篇文章。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。