我第一次加载页面时试图在缓存上存储一些值。这是我正在使用的代码:
$cached_items = [
'main_nav' => $main_nav,
'sub_nav' => $sub_nav,
'footer_nav' => $footer_nav,
'view_as' => $view_as,
];
$redisConnection = new Client('tcp://redis:6379');
$cache = new RedisAdapter($redisConnection);
$menu = $cache->getItem('mmi_menus');
if ($menu->isHit()) {
return $menu->get();
} else {
$menu->set($cached_items);
$cache->save($menu);
}
这个缓存是从一个非Symfony控制器完成的 - 让我们说它是一个独立的文件。
上面代码的第一个问题,
else
条件一直在伸出,我认为不应该存储值。 (查看here)第二个问题,在Symfony控制器中具有此功能:
public function GenerateMenuItemsAction()
{
$redisConnection = new Client('tcp://redis:6379');
$cache = new RedisAdapter($redisConnection);
$menu = $cache->getItem('mmi_menus');
if ($menu->isHit()) {
return $this->render(
'CommonBundle:Layout:menu.html.twig',
['menu' => $menu->get()]
);
}
}
$menu->isHit()
为空,所以我一直从Symfony获得此异常:
在渲染模板期间抛出异常(“The controller必须返回一个响应(给定null)。你忘了添加吗? 在控制器的某处返回声明?“)。
更新
我没有使用任何TTL afaik可能以某种方式设置了默认值,但这就是config.yml
上该部分的样子:
framework:
cache:
app: cache.adapter.redis
default_redis_provider: "redis://%redis_host%"
pools:
cache.pool1:
public: true
我在这里缺少什么?有什么想法吗?
答案 0 :(得分:1)
我的config.yml看起来像那样:
framework:
cache:
system: cache.adapter.apcu
default_redis_provider: redis://%redis_password%@%redis_host%:%redis_port%
pools:
redis_pool:
adapter: cache.adapter.redis
public: true
default_lifetime: 0
provider: cache.default_redis_provider
所以我可以很容易地(在我的控制器中)做类似的事情:
$this->get('redis_pool')->getItem('myitem');
或者您可以将'redis_pool'作为参数注入服务。
我不需要任何“新的”或额外的连接信息/配置 - 任何事情都在config.yml中完成,并在整个应用程序中作为服务提供。