如何在Symfony 2中缓存?

时间:2012-01-17 10:32:17

标签: php caching symfony

我需要使用Symfony 2的缓存系统缓存一些特定于应用程序的数据,以便我可以运行cache:clear来清除它。所有缓存都依赖于app/cache,但我如何实际缓存数据?

http://symfony.com/doc/current/cookbook/index.html

我看到的唯一主题是使用Varnish进行HTML缓存。

5 个答案:

答案 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提供了一个非常简单的界面,为其提供了几个开箱即用的实现:

  • ApcCache(需要ext / apc)
  • ArrayCache(在内存中,请求的生命周期)
  • FilesystemCache(不适合高并发)
  • MemcacheCache(需要ext / memcache)
  • MemcachedCache(需要ext / memcached)
  • PhpFileCache(不适合高并发)
  • RedisCache.php(需要ext / phpredis)
  • WinCacheCache.php(需要ext / wincache)
  • XcacheCache.php(需要ext / xcache)
  • ZendDataCache.php(需要Zend Server Platform)

如果您尚未使用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缓存比文件系统缓存快得多)。