Symfony2简单的结果缓存?

时间:2012-10-12 10:21:44

标签: php caching symfony

我需要在Symfony中使用一个非常简单的Key-Value-Cache。  类似的东西,没有任何Doctrine或HTTP缓存。

<?php
$cacheKey = 'blabla';
if(!$cache->has($cacheKey)) {
    // do some heavy work...
    $cache->set($cacheKey, $heavyWorkResult);
}
$result = $cache->get($cacheKey);

我在手册中是否遗漏了它还是需要另一个捆绑包?

4 个答案:

答案 0 :(得分:2)

你为什么不google?或者查看knpbundles.com并在那里搜索“缓存”:

http://knpbundles.com/search?q=Cache

也许这符合您的需求:

https://github.com/winzou/CacheBundle

<强>用法:

$cache = $this->get('winzou_cache.apc');
// or
$cache = $this->get('winzou_cache.file');
// or
$cache = $this->get('winzou_cache.memcache');
// or
$cache = $this->get('winzou_cache.array');
// or
$cache = $this->get('winzou_cache.xcache');
// or
$cache = $this->get('winzou_cache.zenddata');
// or
$cache = $this->get('winzou_cache'); // in that case, it will use the default driver     defined in config.yml, see below

$cache->save('bar', array('foo', 'bar'));

if ($cache->contains('bar')) {
    $bar = $cache->fetch('bar');
}

$cache->delete('bar');

修改

为此使用会话并不是一个好主意。会话是按用户进行的,无法共享缓存的值。当您使用会话时,您必须考虑序列化以及在会话中存储复杂对象时可能发生的其他问题。

答案 1 :(得分:1)

我认为你可以使用https://github.com/doctrine/cache(现在在独立的学说中使用的缓存系统)

答案 2 :(得分:1)

我使用过LiipDoctrineCache虽然它使用了Doctrine缓存,但它支持多种数据存储 - 包括文件系统和APC。

https://github.com/liip/LiipDoctrineCacheBundle

以下是我如何使用它来缓存外部API响应:

$cache_driver = $container->get('liip_doctrine_cache.ns.YOUR_NAME');

if ($cache_driver->contains($cache_key)) {
   return $this->cache_driver->fetch($cache_key);
}

// Do something expensive here...

$cache_driver->save($cache_key, "Mixed Data", strtotime('4 hours'));

答案 3 :(得分:0)

来自Symfony文档:

use Symfony\Component\HttpFoundation\Session\Session;

$session = new Session();
$session->start();

// set and get session attributes
$session->set('name', 'Drak');
$session->get('name');

http://symfony.com/doc/master/components/http_foundation/sessions.html