Ich versuche einige Werte im Cache zu speichern, wenn ich zum ersten Mal eine Seite lade. Dies ist der Code Ich verwende:Wie speichern und lesen Sie Werte im Cache mit Symfony und RedisAdapter?
$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);
}
Das Caching von einem nicht Symfony Controller getan wird - sagen wir mal, es ist eine eigenständige Datei.
Erstes Problem mit dem Code oben,
- der
else
Zustand ist die ganze Zeit zu erreichen, und ich denke, es ist nicht da Werte gespeichert werden sollte. (Check here)
Zweites Problem, mit dieser Funktion in einem Symfony-Controller:
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()
ist null so die ganze Zeit ich diese Ausnahme von Symfony bin immer:
Ein Ausnahme wurde beim Rendern einer Vorlage ausgelöst ("Der Controller muss eine Antwort zurückgeben (Null gegeben). Haben Sie vergessen, irgendwo in yo eine Rückgabeanweisung hinzuzufügen Dein Controller? ").
aktualisieren
ich keine TTL bin mit afaik vielleicht irgendwie ein Standard ist Setup, aber das ist, wie der Abschnitt wie config.yml
auf dem aussieht:
framework:
cache:
app: cache.adapter.redis
default_redis_provider: "redis://%redis_host%"
pools:
cache.pool1:
public: true
Was mir fehlt
Hier? Irgendwelche Ideen?
Setzen Sie Cache-Ttl? – zenith
@mdma Ich bin nicht, siehe das Update auf dem OP – ReynierPM
irgendwie seltsam, dass Sie redis Cache in config.yml definieren, sondern instanziieren Sie es mit 'neu' in Ihren Klassen. es sieht für mich aus, dass du nicht das konfigurierte, sondern jedesmal ein neues verwendest - und für diese könnte es sein, dass du kein richtiges ttl definiert hast. – LBA