缓存组件

编辑本页

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

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

缓存组件

Cache组件提供了一个扩展的PSR-6实现以及一个PSR-16“简单缓存”实现为您的应用程序添加缓存。它的设计开销很低,并且附带了用于最常见的缓存后端的现成适配器。

3.3

PSR-16“简单缓存”实现是在Symfony 3.3中引入的。欧宝娱乐app下载地址

安装

你可以用两种不同的方式安装组件:

缓存(PSR-6) vs简单缓存(PSR-16)

该组件包括两个不同的缓存方法:

PSR-6缓存
一个功能齐全的缓存系统,包括缓存“池”,更高级的缓存“项”和用于无效的缓存标记
PSR-16简单缓存
从缓存中存储、获取和删除项目的简单方法。

两种方法都支持相同缓存适配器和将给您非常相似的性能。

提示

该组件还包含在PSR-6和PSR-16缓存之间进行转换的适配器。看到PSR-6和PSR-16缓存之间的互操作性适配器

简单高速缓存(PSR-16)

这部分是组件的实现PSR-16,这意味着它的基本API与标准中定义的相同。首先,从一个内置缓存类创建一个缓存对象。例如,要创建基于文件系统的缓存,请实例化FilesystemCache

1 2 3
使用欧宝娱乐app下载地址组件缓存简单的FilesystemCache缓存FilesystemCache ();

现在你可以使用这个对象创建、检索、更新和删除项目:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
//在缓存中保存一个新项缓存->集(“stats.num_products”4711);//或设置自定义TTL/ /缓存- >设置(“统计数据。Num_products ', 4711, 3600);//获取缓存项如果(!缓存->有(“stats.num_products”)) {/ /……项在缓存中不存在//获取项存储的值numProducts缓存->get (“stats.num_products”);//或指定一个默认值,如果键不存在// $numProducts = $cache->get('stats. properties ')num_products ', 100);//删除缓存键缓存->删除(“stats.num_products”);//清除所有缓存键缓存->明确的();

你也可以同时使用多个项目:

12 3 4 5 6 7 8 9 10 11 12 13 14
缓存->setMultiple (数组“stats.num_products”= >4711“stats.num_users”= >1356));统计数据缓存->getMultiple (数组“stats.num_products”“stats.num_users”));缓存->deleteMultiple (数组“stats.num_products”“stats.num_users”));

可用的简单缓存(PSR-16)类

以下是可用的缓存适配器:

提示

要了解关于这些类的更多信息,您可以阅读PSR-6缓存池页面。这些“简单”(PSR-16)缓存类与该页上的PSR-6适配器并不相同,但每个类都共享构造函数参数和用例。

更高级的高速缓存(PSR-6)

要使用更先进的PSR-6缓存功能,您需要学习其关键概念:

以键/值对存储的单个信息单元,其中键是信息的唯一标识符,值是信息的内容;
缓存项的逻辑存储库。所有缓存操作(保存项、查找项等)都是通过池执行的。应用程序可以根据需要定义任意数量的池。
适配器
它实现了实际的缓存机制,将信息存储在文件系统、数据库等中。该组件为常见的缓存后端提供了几个随时可用的适配器(Redis, APCu, Doctrine, PDO等)。

基本用法(PSR-6)

这部分是组件的实现PSR-6,这意味着它的基本API与标准中定义的相同。在开始缓存信息之前,使用任何内置适配器创建缓存池。例如,要创建基于文件系统的缓存,请实例化FilesystemAdapter

1 2 3
使用欧宝娱乐app下载地址组件缓存适配器FilesystemAdapter缓存FilesystemAdapter ();

现在你可以使用这个缓存池创建、检索、更新和删除项目:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
//通过尝试从缓存中获取一个新项来创建一个新项numProducts缓存->getItem (“stats.num_products”);//为项目赋值并保存numProducts->集(4711);缓存->保存(numProducts);//获取缓存项numProducts缓存->getItem (“stats.num_products”);如果(!numProducts->isHit ()) {/ /……项在缓存中不存在//获取项存储的值总计numProducts->get ();//删除缓存项缓存->deleteItem (“stats.num_products”);

有关所有受支持的适配器的列表,请参见缓存池和支持的适配器

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