缓存项
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.3,现已不再维护。
读本页的更新版本用于Syob娱乐下载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 ();
缓存项过期
默认情况下,缓存项永久存储。在实践中,根据所使用的缓存类型的不同,这种“永久存储”可能会有很大的差异缓存池和支持的适配器篇文章。
然而,在某些应用程序中,通常使用寿命较短的缓存项。例如,考虑一个应用程序,它只缓存一分钟的最新消息。欧宝平台是合法的吗在这些情况下,使用expiresAfter ()
方法设置缓存项的秒数:
1 2 3 4
$latest欧宝平台是合法的吗News->expiresAfter (60);// 60秒= 1分钟//该方法也接受\DateInterval实例$latest欧宝平台是合法的吗News->expiresAfter (DateInterval::createFromDateString (“1小时”));
缓存项定义了另一个相关的方法expiresAt ()
设置项目到期的确切日期和时间:
1
$mostPopular欧宝平台是合法的吗News->expiresAt (新\ DateTime (“明天”));
缓存项命中和未命中
使用缓存机制对于提高应用程序性能很重要,但不应该要求使用缓存机制才能使应用程序正常工作。事实上,PSR-6文档明智地指出,缓存错误不应该导致应用程序失败。
在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 ();}