我需要使用Symfony 2的缓存系统缓存一些特定于应用程序的数据,以便我可以运行cache:clear
来清除它。所有缓存都依赖于app/cache
,但我如何实际缓存数据?
http://symfony.com/doc/current/cookbook/index.html
我看到的唯一主题是使用Varnish进行HTML缓存。
答案 0 :(得分:78)
如果您使用的是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));
}
答案 1 :(得分:33)
使用 Doctrine缓存提供程序的简单方法。 首先,注册服务( config.yml 中的示例):
services:
memcached:
class: Memcached
calls:
- [ addServer, ['localhost', 11211] ]
memcached_cache:
class: Doctrine\Common\Cache\MemcachedCache
calls:
- [ setMemcached, [@memcached] ]
然后使用get服务,例如在controler中:
$cache = $this->get('memcached_cache');
发送其他服务使用调用:
calls:
- [ setCacheProvider, [@memcached_cache] ]
或参数:
arguments:
- @memcached_cache
以同样的方式,您可以使用Doctrine Cache包的其他接口。 Doctrine Cache提供了一个非常简单的界面,为其提供了几个开箱即用的实现:
如果您尚未使用Doctrine ,则可能需要 Doctrine项目的公共库:php composer.phar require doctrine/common
或仅需要提供对象的缓存库面向许多缓存后端的API :php composer.phar require doctrine/cache
如何使用Doctrine Caching,您可以在Doctrine Common documentation上的Doctrine Project web site阅读
答案 2 :(得分:10)
Symfony 3.1提供了新的Cache component。
答案 3 :(得分:8)
Symfony2没有为应用程序层缓存提供任何组件。
就像您已被告知的那样,您可以使用Doctrine Common缓存库http://docs.doctrine-project.org/projects/doctrine-common/en/latest/reference/caching.html
如果您想要更高级的东西,您还可以使用社区提供的缓存包之一。例如,https://github.com/TheBigBrainsCompany/TbbcCacheBundle#cachebundle提供了良好缓存策略的工具。
答案 4 :(得分:0)
Symfony2中没有部分缓存,内置缓存仅为完整HTTP。 您必须使用反向代理,如果您只想缓存一段代码,则必须使用ESI。这可能比symfony 1更多的工作,但表现值得。
无论如何,没有什么能阻止你使用memcached并在其中存储一些东西,看at this Bundle即 如果你的问题说明它,你只有数据存储,这是完美的(并且memcache缓存比文件系统缓存快得多)。