缓存池和支持的适配器

编辑本页

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

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

缓存池和支持的适配器

缓存池是缓存项的逻辑存储库。它们执行项目上的所有常见操作,例如保存或查找项目。缓存池独立于实际的缓存实现。因此,即使底层缓存机制从基于文件系统的缓存变为基于Redis或数据库的缓存,应用程序也可以继续使用相同的缓存池。

查找缓存项

缓存池定义了三种方法来查找缓存项。最常见的方法是getItem(键),返回由给定键标识的缓存项:

1 2 3 4
使用欧宝娱乐app下载地址\组件\缓存\适配器\FilesystemAdapter;缓存FilesystemAdapter (“app.cache”);latest欧宝app在哪里找News缓存->getItem (“latest_欧宝app在哪里找news”);

如果没有为给定键定义项,则该方法不返回值以外的空对象,该对象实现了CacheItem类。

如果需要同时获取多个缓存项,请使用getItems([$key1, $key2,…])方法:

1 2
/ /……股票缓存->getItems ([“apple”“facebook”“GOOGL”“微软”]);

同样,如果任何键都不表示有效的缓存项,则不会得到值,但为空CacheItem对象。

与获取缓存项相关的最后一个方法是hasItem(键),返回真正的如果有一个由给定键标识的缓存项:

1 2
/ /……hasBadges缓存->hasItem (“user_”用户标识“_badges”);

保存缓存项

保存缓存项的最常用方法是Psr \缓存\ CacheItemPoolInterface::保存,它立即将项存储在缓存中(它返回真正的是否保存项目或如果发生错误):

1 2 3 4
/ /……userFriends缓存->getItem (“user_”用户标识“_friends”);userFriends->集(用户->getFriends ());isSaved缓存->保存(userFriends);

有时,为了提高应用程序的性能,您可能倾向于不立即保存对象。在这些情况下,使用Psr \缓存\ CacheItemPoolInterface:: saveDeferred方法将缓存项标记为“准备持久化”,然后调用Psr \缓存\ CacheItemPoolInterface:提交方法,当你准备持久化它们全部时:

1 2 3 4 5 6 7 8
/ /……isQueued缓存->saveDeferred (userFriends);/ /……isQueued缓存->saveDeferred (userPreferences);/ /……isQueued缓存->saveDeferred (userRecentProducts);/ /……isSaved缓存->commit ();

saveDeferred ()方法返回真正的当缓存项已成功添加到“持久队列”和否则。的commit ()方法返回真正的当所有挂起的项都成功保存或否则。

移除缓存项

缓存池包括删除缓存项的方法,其中一部分或全部。最常见的是Psr \缓存\ CacheItemPoolInterface:: deleteItem,它删除由给定键标识的缓存项(它返回真正的当项目被成功删除或不存在时否则):

1 2
/ /……isDeleted缓存->deleteItem (“user_”用户标识);

使用Psr \缓存\ CacheItemPoolInterface:: deleteItems方法同时删除多个缓存项(它返回真正的只有当所有项都被删除时,即使它们中的任何或部分不存在):

1 2
/ /……areDeleted缓存->deleteItems ([“category1”“category2”]);

最后,要删除池中存储的所有缓存项,请使用Psr \缓存\ CacheItemPoolInterface:清楚方法(返回真正的当所有项目被成功删除):

1 2
/ /……cacheIsEmpty缓存->明确的();

提示

如果在Symfony应用程序中使用缓存组件,则可以删除欧宝娱乐app下载地址所有项目鉴于池(年代)使用下面的命令(该命令位于框架包):

1 2 3 4 5 6 7
PHP bin/console cache:pool:clear  . PHP bin/console cache:pool:clear#清除“缓存”。应用程序池”PHP bin/控制台缓存:清除cache.app#清除“缓存”。验证”和“缓存”。应用程序池”PHP bin/console cache:pool:清除缓存。验证cache.app

3.4

从Symfony 3.4开始欧宝娱乐app下载地址,缓存:清晰命令不再清除缓存池,因此必须使用缓存池:清楚命令删除。

修剪缓存项

3.4

缓存适配器修剪功能是在Symfony 3.4中引入的。欧宝娱乐app下载地址

有些缓存池不包括自动删除过期缓存项的机制。例如,FilesystemAdapter缓存不会删除过期的缓存项直到显式地请求一个项并确定该项已过期,例如,通过调用Psr \缓存\ CacheItemPoolInterface:: getItem.在某些工作负载下,这会导致过期的缓存项在过期后仍然存在,从而导致过多的过期缓存项浪费大量的磁盘或内存空间。

这一缺点已经通过引入解决了PruneableInterface,定义了抽象方法删除().的ChainAdapterFilesystemAdapterPdoAdapter,PhpFilesAdapter所有这些都实现了这个新接口,允许手动删除过期缓存项:

1 2 3 4 5
使用欧宝娱乐app下载地址\组件\缓存\适配器\FilesystemAdapter;缓存FilesystemAdapter (“app.cache”);/ /……做一些设置和获取操作缓存->删除();

ChainAdapter实现本身不直接包含任何修剪逻辑。相反,当调用链适配器时删除()方法,则将调用委托给其所有兼容的缓存适配器(以及未实现的缓存适配器)PruneableInterface被默默地忽略):

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
使用欧宝娱乐app下载地址\组件\缓存\适配器\ApcuAdapter;使用欧宝娱乐app下载地址\组件\缓存\适配器\ChainAdapter;使用欧宝娱乐app下载地址\组件\缓存\适配器\FilesystemAdapter;使用欧宝娱乐app下载地址\组件\缓存\适配器\PdoAdapter;使用欧宝娱乐app下载地址\组件\缓存\适配器\PhpFilesAdapter;缓存ChainAdapter ([ApcuAdapter (),//不实现PruneableInterfaceFilesystemAdapter (),//实现PruneableInterfacePdoAdapter (),//实现PruneableInterfacePhpFilesAdapter (),//实现PruneableInterface/ /……]);// prune将代理调用PdoAdapter, FilesystemAdapter和PhpFilesAdapter//当静静地跳过ApcuAdapter时缓存->删除();

提示

如果在Symfony应用程序中使用缓存组件,则可以删除欧宝娱乐app下载地址所有项目所有池使用下面的命令(该命令位于框架包):

1
PHP bin/控制台缓存:pool:prune
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。