如何在Symfony 2中缓存?

2022-08-30 11:46:57

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

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

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


答案 1

如果您正在使用 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));
}

答案 2

使用 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(在内存中,请求的生存期)
  • 文件系统缓存(不是高并发的最佳选择)
  • MemcacheCache (需要 ext/memcache)
  • MemcachedCache (require ext/memcached)
  • PhpFileCache(不是高并发的最佳选择)
  • RedisCache.php (require ext/phpredis)
  • WinCacheCache.php (需要 ext/wincache)
  • XcacheCache.php (需要 ext/xcache)
  • ZendDataCache.php(需要 Zend Server Platform)

如果您尚未使用 Doctrine,则可能需要 Doctrine 项目的 Common Library:或者只需要为许多缓存后端提供面向对象 API 的缓存库php composer.phar require doctrine/commonphp composer.phar require doctrine/cache

如何使用教义缓存,您可以在教义项目网站上的教义共同文档中阅读


推荐