缓存池
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 3.1,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
缓存池
缓存池的逻辑存储库缓存项。他们在项目执行所有常见的操作,例如保存或寻找它们。缓存池是独立于实际的缓存实现。因此,应用程序可以继续使用相同的缓存池即使底层的缓存机制的变化从一个基于文件系统缓存复述或数据库缓存。
创建缓存池
通过创建缓存池缓存适配器类,实现AdapterInterface。此组件提供了几个适配器可以使用在你的应用程序。
数组缓存适配器
这个适配器仅用于测试目的,因为内容是存储在内存中,而不是保存在任何方式。除此之外,一些功能解释后不可用,如延期保存:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\缓存\适配器\ArrayAdapter;美元缓存=新ArrayAdapter (/ /秒;应用缓存项不定义自己的一生/ / 0意味着无限期存储缓存条目(即,直到当前的PHP进程完成)美元defaultLifetime=0,/ /如果' '真的' ',的值保存在缓存之前序列化存储它们美元storeSerialized=真正的);
文件系统缓存适配器
这个适配器是有用的,当你想提高应用程序的性能,但不能安装工具如APC或复述,服务器。这个适配器将内容作为常规文件存储在一组本地文件系统上的目录:
1 2 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\缓存\适配器\FilesystemAdapter;美元缓存=新FilesystemAdapter (/ /主缓存目录的子目录缓存项存储的地方美元名称空间=”,/ /秒;应用缓存项不定义自己的一生/ / 0意味着无限期存储缓存条目(即,直到文件删除)美元defaultLifetime=0,/ /主缓存目录(应用程序需要读写权限)/ /如果没有指定,系统内部临时目录中创建一个目录美元目录=零);
APCu缓存适配器
这个适配器可以明显提高应用程序的性能,因为内容缓存服务器的共享内存,这是比文件系统快得多。它需要安装并启用了PHP APCu扩展。不推荐使用它在执行大量的写入和删除操作,因为它产生的碎片在APCu内存可以显著降低性能:
1 2 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\缓存\适配器\ApcuAdapter;美元缓存=新ApcuAdapter (/ /字符串前缀的键项存储在这个缓存美元名称空间=”,/ /秒;应用缓存项不定义自己的一生/ / 0意味着无限期存储缓存条目(即直到APC内存删除)美元defaultLifetime=0,/ /如果存在,这个字符串添加到名称空间来简化/ /整个缓存的失效(例如在部署应用程序时)美元版本=零);
复述,缓存适配器
这个适配器存储服务器的内存的内容。与APCu适配器,它不是当前服务器的共享内存有限,所以你可以将内容存储在一个服务器集群。
它需要安装复述,已经创建了一个连接实现\复述,
,\ RedisArray
,\ RedisCluster
或\ Predis
类:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\组件\缓存\适配器\RedisAdapter;美元缓存=新RedisAdapter (/ /对象存储一个有效的连接到您的复述,系统\复述,美元redisConnection,/ /字符串前缀的键项存储在这个缓存美元名称空间=”,/ /秒;应用缓存项不定义自己的一生/ / 0意味着无限期存储缓存条目(即直到复述,记忆被删除)美元defaultLifetime=0);
链缓存适配器
这个适配器允许将任意数量的前一个适配器。从第一个适配器包含缓存项获取它们。此外,缓存项保存在所有给定的适配器,所以这是一个简单的创建一个缓存复制方式:
1 2 3 4 5 6 7 8
使用ob娱乐下载\组件\缓存\适配器\ApcuAdapter;使用ob娱乐下载\组件\缓存\适配器\ChainAdapter;使用ob娱乐下载\组件\缓存\适配器\FilesystemAdapter;美元apcCache=新ApcuAdapter ();美元fileCache=新FilesystemAdapter ();美元缓存=新ChainAdapter (数组(美元apcCache,美元fileCache));
当一个项目不是发现在第一个适配器,但发现在未来的ChainAdapter
确保所获取的物品保存在所有的适配器,它失踪了。因为它是不可能知道一个缓存项的到期日期和时间,第二个可选参数ChainAdapter
是默认的一生中应用这些缓存项(默认情况下是吗0
)。
适配器代理缓存
这个适配器是有用的在应用程序中集成缓存池不是用Symfony创建的缓存组件。ob娱乐下载只要这些缓存池实现CacheItemPoolInterface
接口,该适配器允许您从外部获得物品Symfony缓存的缓存和保存您的应用程序:ob娱乐下载
1 2 3 4
使用ob娱乐下载\组件\缓存\适配器\ProxyAdapter;/ /……创建美元nonSymfob娱乐下载onyCache不知何故美元缓存=新ProxyAdapter (美元nonob娱乐下载SymfonyCache);
适配器接受两个额外的可选参数:名称空间(”
默认情况下)和默认的一生(0
默认情况下)。
这个适配器的另一个用例是获得统计数据和指标的缓存命中率(getHits ()
和想念getMisses ()
)。
教义缓存适配器
这个适配器封装任何教义缓存提供者,这样你就可以在应用程序中使用它们就像Symfony缓存适配器:ob娱乐下载
1 2 3 4 5 6
使用学说\常见的\缓存\SQLite3Cache;使用ob娱乐下载\组件\缓存\适配器\DoctrineAdapter;美元sqliteDatabase=新\ SQLite3 (__DIR__。“/缓存/ data.sqlite”);美元doctrineCache=新SQLite3Cache (美元sqliteDatabase,“表”);美元ob娱乐下载symfonyCache=新DoctrineAdapter (美元doctrineCache);
这个适配器还定义了两个可选参数名称空间
(默认值:”
),defaultLifetime
(默认值:0
)和适应他们让他们工作在底层教义缓存。
寻找缓存条目
缓存池定义三种方法寻找缓存项。最常见的方法getItem(键)
,它返回缓存条目被给定的关键:
1 2 3 4
使用ob娱乐下载\组件\缓存\适配器\FilesystemAdapter;美元缓存=新FilesystemAdapter (“app.cache”);美元latest欧宝平台是合法的吗News=美元缓存- >getItem (“latest_欧宝平台是合法的吗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=美元缓存- >get (“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=美元缓存- >明确的();