书籍Symfony 5:快速轨道ob娱乐下载

ob娱乐下载Symfony 5:快速轨道是学习现代交响乐发展的最佳书籍,从零到生产。ob娱乐下载+300页展示Symfony的Docker,ob娱乐下载 api,队列和异步任务,Webpack, spa等。

缓存组件

缓存组件

缓存组件提供了涵盖高级缓存需求的功能。它本地有所实现PSR-6缓存合同为最大的互操作性。它是为性能和弹性而设计的,附带的适配器可用于最常见的缓存后端。它通过锁定和提前过期来实现基于标记的失效和缓存踩踏保护。

提示

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

安装

1
美元Composer需要Symfonyob娱乐下载 / Cache

请注意

如果在Symfony应用程序之外安装此组件,则必须要求ob娱乐下载供应商/ autoload.php代码中的文件以启用Composer提供的类自动加载机制。读本文为更多的细节。

缓存合同与PSR-6

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

PSR-6缓存:
通用缓存系统,涉及缓存“池”和缓存“项目”。
缓存合同:
基于重计算回调函数缓存值的一种更简单但更强大的方法。

提示

建议使用缓存契约方法:它需要更少的代码样板,并在默认情况下提供缓存踩踏保护。

缓存合同

所有适配器都支持缓存契约。它们只包含两种方法:得到()删除()。没有放()方法,因为得到()方法都获取并设置缓存值。

您需要做的第一件事是实例化缓存适配器。的ob娱乐下载Symfony \ Component \ Cache \ Adapter \ FileSystemAdapter在此示例中使用:

使用ob娱乐下载Symfony \ Component \ Cache \ Adapter \ FileSystemAdapter;$缓存=新的filesystemadapter.();

现在您可以使用此对象检索和删除缓存的数据。的第一个参数得到()方法是一个密钥,您将与缓存值相关联的任意字符串,以便您稍后检索它。第二个参数是PHP可调用,当在缓存中未找到密钥以生成并返回值时执行:

使用ob娱乐下载symfony \ contracts \ cache \ iteminterface;//可调用只将在缓存未命中执行。价值=$缓存- >得到('my_cache_key',功能(ItemInterface$项目){$项目- >过期(3600);/ /……执行HTTP请求或繁重的计算$ ComputedValue.=“foobar”;返回$ ComputedValue.;});回声价值;//'foobar'/ /……并删除缓存键$缓存- >删除('my_cache_key');

请注意

使用缓存标记当时删除多个密钥。阅读更多缓存失效

缓存契约也是内置的踩踏预防。当缓存很冷时,这将删除时刻的CPU尖峰。如果示例应用程序花费5秒钟来计算高速缓存的数据1小时,并且每秒访问10次数据,这意味着您大多数都有缓存命中,一切都很好。但1小时后,我们将10个新请求到冷库。所以数据再次计算。接下来的第二个第二件事发生了。因此,数据在缓存再次温暖之前计算数据约50次。这是你需要踩踏的地方。

第一个解决方案是使用锁定:每次只允许一个PHP进程(基于每个主机)计算一个特定的键。默认情况下,锁定是内置的,所以除了利用缓存契约之外,您不需要做任何事情。

使用缓存合约时,第二个解决方案也是内置的:而不是在到期之前等待完全延迟,而是在其到期日之前重新计算。的概率早期失效算法随机地为一个用户伪造缓存丢失,而其他用户仍然得到缓存值。您可以使用的第三个可选参数来控制它的行为得到(),这是一个名为“beta”的浮点值。

默认情况下,Beta是1.0更高的值意味着早期重复。将它设置为0禁用“early recompute”并将其设置为INF.强制重新编译:

使用ob娱乐下载symfony \ contracts \ cache \ iteminterface;$ Beta.=1.0;价值=$缓存- >得到('my_cache_key',功能(ItemInterface$项目){$项目- >过期(3600);$项目- >标签([“tag_0”,“tag_1”]);返回'...';},$ Beta.);

通用缓存(PSR-6)

要使用通用的PSR-6缓存能力,你需要学习它的关键概念:

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

基本用法(PSR-6)

组件的这一部分是实现PSR-6,这意味着它的基本API与文档中定义的相同。在开始缓存信息之前,使用任何内置适配器创建缓存池。例如,要创建基于文件系统的缓存,请实例化ob娱乐下载Symfony \ Component \ Cache \ Adapter \ FileSystemAdapter:

使用ob娱乐下载Symfony \ Component \ Cache \ Adapter \ FileSystemAdapter;$缓存=新的filesystemadapter.();

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

//通过尝试从缓存中获取一个新条目来创建一个新条目productsCount美元=$缓存- >getItem('stats.products_count');//为项目赋值并保存它productsCount美元- >(4711.);$缓存- >保存(productsCount美元);//获取缓存项productsCount美元=$缓存- >getItem('stats.products_count');如果(!productsCount美元- >ishit.()){// ...在缓存中不存在项目}//获取存储在项中的值$总数=productsCount美元- >得到();//移除缓存项$缓存- >deleteItem.('stats.products_count');

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

编组(序列化)数据

请注意

编组序列化类似的概念。序列化是将对象状态转换为可以存储的格式(例如文件)的过程。编组是将对象状态及其代码基转换为可存储或传输的格式的过程。

对对象进行反编组会生成原始对象的副本,这可能是通过自动加载对象的类定义实现的。

ob娱乐下载Symfony使用信号员(类的实现ob娱乐下载symfony \ component \ cache \ marshaller \ marshallerInterface)在存储它们之前处理缓存项。

ob娱乐下载symfony \ component \ cache \ marshaller \ defaultmarshaller使用PHPserialize ()或者igbinary_serialize()如果是Igbinary扩展安装。还有其他的信号员可以在存储之前加密或压缩数据:

使用ob娱乐下载Symfony \ Component \ Cache \ Adapter \ RedIsAdapter;使用ob娱乐下载symfony \ component \ cache \ defaultmarshaller;使用ob娱乐下载symfony \ component \ cache \ deflatemarshaller;$ Marshaller.=新的deflatemarshaller.(新的defaultmarshaller.());$缓存=新的rediSADAPTER.(新的\ redis.(),“名称”,0,$ Marshaller.);

这项工作包括代码样本,是在a下获得的许可根据sa 3.0的知识共享许可证。