缓存项

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.4,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

缓存项

单位的信息存储在缓存中缓存项的键/值对。在缓存组件所代表的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 ();}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。