缓存项

编辑本页

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

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

缓存项

缓存项是作为键/值对存储在缓存中的信息单元。在Cache组件中,它们由CacheItem类。它们在缓存契约和PSR-6接口中都使用。

缓存项键和值

关键缓存项的一个普通字符串作为它的标识符,因此它对于每个缓存池必须是唯一的。您可以自由选择键,但它们应该只包含字母(A-Z, A-Z),数字(0-9)和_而且符号。其他常用的符号(如/@而且:)由PSR-6标准保留,以备日后使用。

价值缓存项的数据可以是任何由PHP可序列化的类型表示的数据,例如基本类型(字符串、整数、浮点数、布尔值、null)、数组和对象。

创建缓存项

创建缓存项的唯一方法是通过缓存池。当使用缓存契约时,它们被作为参数传递给重计算回调:

1 2 3 4
//之前创建的$缓存池对象productsCount缓存->get (“stats.products_count”函数(ItemInterface/ /[…]});

使用PSR-6时,它们是使用getItem(键)缓存池方式:

1 2
//之前创建的$缓存池对象productsCount缓存->getItem (“stats.products_count”);

然后,使用Psr \缓存\ CacheItemInterface:集方法来设置存储在缓存项中的数据(这一步在使用缓存契约时自动完成):

1 2 3 4 5 6 7 8 9 10
//存储简单整数productsCount->集(4711);缓存->保存(productsCount);//存储数组productsCount->集((“category1”= >4711“category2”= >2387]);缓存->保存(productsCount);

任何给定缓存项的键和值都可以使用相应的getter方法:

1 2 3 4
cacheItem缓存->getItem (“exchange_rate”);/ /……关键cacheItem->getKey ();价值cacheItem->get ();

缓存项过期

默认情况下,缓存项永久存储。在实践中,根据所使用的缓存类型的不同,这种“永久存储”可能会有很大的差异缓存池和支持的适配器篇文章。

然而,在某些应用程序中,通常使用寿命较短的缓存项。例如,考虑一个应用程序,它只缓存一分钟的最新消息。欧宝app在哪里找在这些情况下,使用expiresAfter ()方法设置缓存项的秒数:

1 2 3 4
latest欧宝app在哪里找News->expiresAfter (60);// 60秒= 1分钟//该方法也接受\DateInterval实例latest欧宝app在哪里找News->expiresAfter (DateInterval::createFromDateString (“1小时”));

缓存项定义了另一个相关的方法expiresAt ()设置项目到期的确切日期和时间:

1
mostPopular欧宝app在哪里找News->expiresAt (\ DateTime (“明天”));

缓存项命中和未命中

使用缓存机制对于提高应用程序性能很重要,但不应该要求使用缓存机制才能使应用程序正常工作。事实上,PSR-6文档明智地指出,缓存错误不应该导致应用程序失败。

在PSR-6的实践中,这意味着getItem ()方法始终返回一个实现Psr \ \ CacheItemInterface缓存接口,即使缓存项不存在。因此,你不必处理返回值,您可以安全地将值存储在缓存中,例如而且

为了确定返回的对象是否代表来自存储的值,缓存使用了命中和未命中的概念:

  • 缓存命中率当请求的项在缓存中被找到,它的值没有损坏或无效并且没有过期时发生;
  • 缓存错过与命中相反,因此当缓存中没有找到该项、其值因任何原因损坏或无效或项已过期时,就会发生命中。

缓存项对象定义一个布尔值isHit ()方法,返回真正的对于缓存命中:

1 2 3 4 5 6 7 8 9
latest欧宝app在哪里找News缓存->getItem (“latest_欧宝app在哪里找news”);如果(!latest欧宝app在哪里找News->isHit ()) {//做一些繁重的计算欧宝app在哪里找=……;缓存->保存(latest欧宝app在哪里找News->集(欧宝app在哪里找));}其他的欧宝app在哪里找latest欧宝app在哪里找News->get ();}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。