Php 如何在Symfony 2中缓存?
我需要使用Symfony 2的缓存系统缓存一些特定于应用程序的数据,以便运行Php 如何在Symfony 2中缓存?,php,caching,symfony,Php,Caching,Symfony,我需要使用Symfony 2的缓存系统缓存一些特定于应用程序的数据,以便运行cache:clear来清除它。所有缓存都依赖于app/cache,但我实际上如何缓存数据呢 我看到的唯一一个主题是关于使用Varnish的HTML缓存。Symfony2中没有部分缓存,内置缓存仅为完整的HTTP缓存。 您必须使用反向代理,如果您只想缓存一段代码,则必须使用ESI。这可能比symfony 1需要更多的工作,但性能值得 无论如何,没有什么能阻止你使用memcached并在其中存储一些东西,比如。 如果正如
cache:clear
来清除它。所有缓存都依赖于app/cache
,但我实际上如何缓存数据呢
我看到的唯一一个主题是关于使用Varnish的HTML缓存。Symfony2中没有部分缓存,内置缓存仅为完整的HTTP缓存。 您必须使用反向代理,如果您只想缓存一段代码,则必须使用ESI。这可能比symfony 1需要更多的工作,但性能值得 无论如何,没有什么能阻止你使用memcached并在其中存储一些东西,比如。
如果正如您的问题所述,您只有数据要存储,那就太完美了(memcache缓存比文件系统缓存快得多)。如果您正在使用Doctrine,那么只需使用这些缓存类即可 将服务添加到
config.yml
:
services:
cache:
class: Doctrine\Common\Cache\ApcCache
并在控制器中使用它:
if ($fooString = $this->get('cache')->fetch('foo')) {
$foo = unserialize($fooString);
} else {
// do the work
$this->get('cache')->save('foo', serialize($foo));
}
简单方式使用原则缓存提供程序。 首先,注册服务(config.yml中的示例): 然后使用get服务,例如在Controller中:
$cache = $this->get('memcached_cache');
要发送其他服务,请使用呼叫:
或论点:
arguments:
- @memcached_cache
同样,您可以使用Doctrine Cache包的其他接口。
条令缓存提供了一个非常简单的接口,提供了几种现成的实现:
- ApcCache(需要ext/apc)
- ArrayCache(内存中,请求的生存期)
- FilesystemCache(对于高并发性而言不是最佳选择)
- MemcacheCache(需要ext/memcache)
- MemcachedCache(需要ext/memcached)
- PhpFileCache(对于高并发性而言不是最佳选择)
- RedisCache.php(需要ext/phpredis)
- wincache.php(需要ext/wincache)
- XcacheCache.php(需要ext/xcache)
- ZendDataCache.php(需要Zend服务器平台)
php composer.phar需要条令/Common
或只需要缓存库,为许多缓存后端提供面向对象的API:php composer.phar需要条令/cache
如何使用您可以在上阅读的条令缓存Symfony2不提供任何应用层缓存组件 正如已经告诉您的,您可以使用Common caching库
如果您想要更高级的东西,还可以使用社区提供的缓存包之一。例如,提供了用于良好缓存策略的工具。Symfony 3.1提供了一个新的。Symfony2也可以通过ESI实现在内部执行此缓存。一开始它可能看起来有点复杂,但它使使用Varnish进行缩放的步骤小得多。@Louis Philippehuberdou我感兴趣的是缓存特定于应用程序的数据,而不是模板/HTML。我感兴趣的是缓存特定于应用程序的数据,如计算昂贵的结果等。我已经在APC上缓存了它们,但是有两个不同的缓存系统有什么意义呢?我现在还需要清除两个缓存,虽然我自己做了一个命令来清除这两个缓存,但仍然如此。据说APC在用作操作码缓存时不应用于缓存数据(如来自DB),因为它会影响其性能。为什么要对自定义数据存储使用单独的缓存,这是有道理的。如果我不使用Doctrine呢?为什么这是教义的一部分?@Tower仍然没有答案?这是教义的一部分\普通。不要将其与ORM、DBAL等混淆。“Doctrine Common project是一个为核心PHP功能提供扩展的库。”有没有办法设置一个时间?@FrancisGonzales
save
方法需要第三个生命周期
参数:非常感谢您的回答,它终于起作用了,我只是在YAML上有一个小错误,似乎@memcached需要引号-[setMemcached,['@memcached']](我使用的是symfony 3.0)
calls:
- [ setCacheProvider, [@memcached_cache] ]
arguments:
- @memcached_cache