缓存项

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

缓存项

缓存项是作为键/值对存储在缓存中的信息单元。在Cache组件中,它们由CacheItem类。

缓存项键和值

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

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

创建缓存项

属性创建缓存项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 ();

缓存项过期

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

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

1 2 3 4 5
latest欧宝平台是合法的吗News缓存->getItem (“latest_欧宝平台是合法的吗news”);latest欧宝平台是合法的吗News->expiresAfter (60);// 60秒= 1分钟//该方法也接受\DateInterval实例latest欧宝平台是合法的吗News->expiresAfter (DateInterval::createFromDateString (“1小时”));

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

1 2
mostPopular欧宝平台是合法的吗News缓存->getItem (“popular_欧宝平台是合法的吗news”);mostPopular欧宝平台是合法的吗News->expiresAt (\ DateTime (“明天”));

缓存项命中和未命中

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

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

为了判断返回的对象是否正确,缓存使用了命中和未命中的概念:

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

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

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