缓存池
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.2,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
缓存池
缓存池的逻辑存储库缓存项。他们在项目执行所有常见的操作,例如保存或寻找它们。缓存池是独立于实际的缓存实现。因此,应用程序可以继续使用相同的缓存池即使底层的缓存机制的变化从一个基于文件系统缓存复述或数据库缓存。
创建缓存池
通过创建缓存池缓存适配器类,实现AdapterInterface。此组件提供了几个适配器可以使用在你的应用程序。
数组缓存适配器
这个适配器仅用于测试目的,因为内容是存储在内存中,而不是保存在任何方式。除此之外,一些功能解释后不可用,如延期保存:
1 2 3 4 5 6 7 8 9
使用欧宝娱乐app下载地址\组件\缓存\适配器\ArrayAdapter;美元缓存=新ArrayAdapter (/ /秒;应用缓存项不定义自己的一生/ / 0意味着无限期存储缓存条目(即,直到当前的PHP进程完成)美元defaultLifetime=0,/ /如果' '真的' ',的值保存在缓存之前序列化存储它们美元storeSerialized=真正的);
文件系统缓存适配器
这个适配器是有用的,当你想提高应用程序的性能,但不能像APCu或复述,在服务器中安装工具。这个适配器将内容作为常规文件存储在一组本地文件系统上的目录:
1 2 3 4 5 6 7 8 9 10 11 12
使用欧宝娱乐app下载地址\组件\缓存\适配器\FilesystemAdapter;美元缓存=新FilesystemAdapter (/ /主缓存目录的子目录缓存项存储的地方美元名称空间=”,/ /秒;应用缓存项不定义自己的一生/ / 0意味着无限期存储缓存条目(即,直到文件删除)美元defaultLifetime=0,/ /主缓存目录(应用程序需要读写权限)/ /如果没有指定,系统内部临时目录中创建一个目录美元目录=零);
Php文件缓存适配器
这个适配器非常类似于文件系统的适配器,除了节省创建一个. php
获取文件,该文件包含(允许文件保存在OPcache):
1 2 3 4 5 6 7 8 9 10 11 12
使用欧宝娱乐app下载地址\组件\缓存\适配器\PhpFilesAdapter;美元缓存=新PhpFilesAdapter (/ /主缓存目录的子目录缓存项存储的地方美元名称空间=”,/ /秒;应用缓存项不定义自己的一生/ / 0意味着无限期存储缓存条目(即,直到文件删除)美元defaultLifetime=0,/ /主缓存目录(应用程序需要读写权限)/ /如果没有指定,系统内部临时目录中创建一个目录美元目录=零);
APCu缓存适配器
这个适配器可以明显提高应用程序的性能,因为内容缓存服务器的共享内存,这是比文件系统快得多。它需要安装并启用了PHP APCu扩展。不推荐使用它在执行大量的写入和删除操作,因为它产生的碎片在APCu内存可以显著降低性能:
1 2 3 4 5 6 7 8 9 10 11 12
使用欧宝娱乐app下载地址\组件\缓存\适配器\ApcuAdapter;美元缓存=新ApcuAdapter (/ /字符串前缀的键项存储在这个缓存美元名称空间=”,/ /秒;应用缓存项不定义自己的一生/ / 0意味着无限期存储缓存条目(即直到APC内存删除)美元defaultLifetime=0,/ /如果存在,这个字符串添加到名称空间来简化/ /整个缓存的失效(例如在部署应用程序时)美元版本=零);
复述,缓存适配器
这个适配器存储内容的记忆复述,服务器。与APCu适配器,它不是当前服务器的共享内存有限,所以你可以将内容存储在一个服务器集群。
它需要安装复述,已经创建了一个连接实现\复述,
,\ RedisArray
,\ RedisCluster
或\ Predis
类:
1 2 3 4 5 6 7 8 9 10 11
使用欧宝娱乐app下载地址\组件\缓存\适配器\RedisAdapter;美元缓存=新RedisAdapter (/ /对象存储一个有效的连接到您的复述,系统\复述,美元redisConnection,/ /字符串前缀的键项存储在这个缓存美元名称空间=”,/ /秒;应用缓存项不定义自己的一生/ / 0意味着无限期存储缓存条目(即直到复述,记忆被删除)美元defaultLifetime=0);
的createConnection ()助手允许创建连接使用DSN复述,服务器配置:
1
美元redisConnection= RedisAdapter::createConnection (复述:/ / localhost的);
看到更多的选择方法的docblock。
谨慎
复述,连接不支持登录+密码凭证,但只是一个密码。这个密码包含一个时可以产生了不良反应:
字符(如。foo:酒吧
密码是错误地解析喷火
登录+酒吧
密码)。解决方法是添加一个假登录到DSN连接。而不是“复述:/ / foo: bar@localhost”
,使用复述:/ / __ignore_this__: foo: bar@localhost”
。
PDO和教义DBAL缓存适配器
3.2
PDO和教义DBAL适配器是在Symfony 3.2中引入的。欧宝娱乐app下载地址
这个适配器存储缓存条目一个SQL数据库通过PDO访问或教义DBAL连接:
1 2 3 4 5 6 7 8 9 10 11 12 13
使用欧宝娱乐app下载地址\组件\缓存\适配器\PdoAdapter;美元缓存=新PdoAdapter (/ /一个PDO,教义DBAL连接通过PDO懒惰或DSN连接美元databaseConnectionOrDSN,/ /字符串前缀的键项存储在这个缓存美元名称空间=”,/ /秒;应用缓存项不定义自己的一生/ / 0意味着无限期存储缓存条目(即直到数据库清理)美元defaultLifetime=0,/ /数组的选项配置数据库连接美元选项=数组());
链缓存适配器
这个适配器允许将任意数量的前一个适配器。从第一个适配器包含缓存项获取它们。此外,缓存项保存在所有给定的适配器,所以这是一个简单的创建一个缓存复制方式:
1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址\组件\缓存\适配器\ApcuAdapter;使用欧宝娱乐app下载地址\组件\缓存\适配器\ChainAdapter;使用欧宝娱乐app下载地址\组件\缓存\适配器\FilesystemAdapter;美元apcCache=新ApcuAdapter ();美元fileCache=新FilesystemAdapter ();美元缓存=新ChainAdapter (数组(美元apcCache,美元fileCache));
当一个项目不是发现在第一个适配器,但发现在未来的ChainAdapter
确保所获取的物品保存在所有的适配器,它失踪了。因为它是不可能知道一个缓存项的到期日期和时间,第二个可选参数ChainAdapter
是默认的一生中应用这些缓存项(默认情况下是吗0
)。
适配器代理缓存
这个适配器是有用的在应用程序中集成缓存池不是用Symfony创建的缓存组件。欧宝娱乐app下载地址只要这些缓存池实现CacheItemPoolInterface
接口,该适配器允许您从外部获得物品Symfony缓存的缓存和保存您的应用程序:欧宝娱乐app下载地址
1 2 3 4
使用欧宝娱乐app下载地址\组件\缓存\适配器\ProxyAdapter;/ /……创建美元nonSymf欧宝娱乐app下载地址onyCache不知何故美元缓存=新ProxyAdapter (美元non欧宝娱乐app下载地址SymfonyCache);
适配器接受两个额外的可选参数:名称空间(”
默认情况下)和默认的一生(0
默认情况下)。
教义缓存适配器
这个适配器封装任何教义缓存提供者,这样你就可以在应用程序中使用它们就像Symfony缓存适配器:欧宝娱乐app下载地址
1 2 3 4 5 6
使用学说\常见的\缓存\SQLite3Cache;使用欧宝娱乐app下载地址\组件\缓存\适配器\DoctrineAdapter;美元sqliteDatabase=新\ SQLite3 (__DIR__。“/缓存/ data.sqlite”);美元doctrineCache=新SQLite3Cache (美元sqliteDatabase,“表”);美元欧宝娱乐app下载地址symfonyCache=新DoctrineAdapter (美元doctrineCache);
这个适配器还定义了两个可选参数名称空间
(默认值:”
),defaultLifetime
(默认值:0
)和适应他们让他们工作在底层教义缓存。
Php数组缓存适配器
这个适配器是一种高性能缓存静态数据(例如应用程序配置)优化和预加载到OPcache内存存储:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
使用欧宝娱乐app下载地址\组件\缓存\适配器\PhpArrayAdapter;使用欧宝娱乐app下载地址\组件\缓存\适配器\PhpFilesAdapter;/ /不知何故,决定是时候热身缓存!如果(美元needsWarmup){/ /静态值美元值=数组(“stats.num_products”= >4711年,“stats.num_users”= >1356年,);美元缓存=新PhpArrayAdapter (/ /单文件缓存值的地方__DIR__。' / somefile.cache ',/ /备份适配器,热身后如果你设置值新FilesystemAdapter ());美元缓存- >热身(美元值);}/ /……然后,使用缓存!美元cacheItem=美元缓存- >getItem (“stats.num_users”);回声美元cacheItem- >get ();
请注意
这个适配器需要PHP 7。应该使用x和php。ini设置opcache.enable
上。
寻找缓存条目
缓存池定义三种方法寻找缓存项。最常见的方法getItem(键)
,它返回缓存条目被给定的关键:
1 2 3 4
使用欧宝娱乐app下载地址\组件\缓存\适配器\FilesystemAdapter;美元缓存=新FilesystemAdapter (“app.cache”);美元latest欧宝app在哪里找News=美元缓存- >getItem (“latest_欧宝app在哪里找news”);
对于给定的键,如果没有定义项的方法不会返回零
但一个空对象,实现了价值CacheItem类。
如果你需要同时获取多个缓存条目,而不是使用getItems(数组(key1, key2美元,……)
方法:
1 2
/ /……美元股票=美元缓存- >getItems (数组(“apple”,“facebook”,“GOOGL”,“微软”));
再一次,如果任何键并不代表一个有效的缓存项,你不会得到一个零
但一个空值CacheItem
对象。
最后一个方法相关抓取缓存项hasItem(键)
,它返回真正的
如果有一个缓存项被给定的关键:
1 2
/ /……美元hasBadges=美元缓存- >hasItem (“user_”。美元用户标识。“_badges”);
保存缓存条目
最常见的方法保存缓存条目save ()在缓存中存储项立即(它返回真正的
如果项目或保存假
如果有错误发生):
1 2 3 4
/ /……美元userFriends=美元缓存- >getItem (“user_”。美元用户标识。“_friends”);美元userFriends- >集(美元用户- >getFriends ());美元isSaved=美元缓存- >保存(美元userFriends);
有时你可能更喜欢不立即保存对象,以提高应用程序的性能。在这种情况下,使用saveDeferred ()方法将缓存条目标记为“准备坚持“然后调用commit ()方法当你准备坚持:
1 2 3 4 5 6 7 8
/ /……美元isQueued=美元缓存- >saveDeferred (美元userFriends);/ /……美元isQueued=美元缓存- >saveDeferred (美元userPreferences);/ /……美元isQueued=美元缓存- >saveDeferred (美元userRecentProducts);/ /……美元isSaved=美元缓存- >commit ();
的saveDeferred ()
方法返回真正的
当缓存项已成功添加到“坚持队列”和假
否则。的commit ()
方法返回真正的
当所有的等待成功保存或物品假
否则。
删除缓存项
缓存池包括删除缓存项的方法,其中一些或全部。最常见的是deleteItem ()删除缓存项,通过给定的键标识(它返回真正的
当项目成功删除或不存在假
否则):
1 2
/ /……美元isDeleted=美元缓存- >deleteItem (“user_”。美元用户标识);
使用deleteItems ()方法同时删除多个缓存条目(它返回真正的
只有当所有的商品都被删除,即使不存在任何或其中一些):
1 2
/ /……美元areDeleted=美元缓存- >deleteItems (数组(“category1”,“category2”));
最后,清除所有缓存条目中存储池,使用clear ()方法(返回真正的
当所有项目成功删除):
1 2
/ /……美元cacheIsEmpty=美元缓存- >明确的();
提示
如果缓存组件内部使用Symfony应用程序中,您可以删除给定的所有物品缓存池使用欧宝娱乐app下载地址下面的命令:
1 2 3 4 5 6 7
美元php bin /控制台缓存池:明确< cache-pool-name >#清除缓存。应用程序池”美元php bin /控制台缓存池:cache.app清晰#清除缓存。验证”和“缓存。应用程序池”美元php bin /控制台缓存:缓存池:清楚。验证cache.app