2017-01-16 4 views
1

Hallo gibt es Weg, um alle zwischengespeicherten Daten aus Symfony Cache-Komponente zu löschen?Symfony löschen Cache-Komponente nach der Bereitstellung

Hier http://symfony.com/doc/current/components/cache/cache_pools.html unten ist: (i Konsolenbefehl benötigen)

$cacheIsEmpty = $cache->clear(); 

und Befehl:

bin/console cache:clear 

hält diesen Cache unberührt

Ich lookig für Hexenkonsolenbefehl kann i Rufen Sie bei jeder Implementierung das Script * .sh auf.

EDIT (Beispiel):

Standard-Eingabemöglichkeiten:

$cache = new FilesystemAdapter(); 
$defaultInputOptions = $cache->getItem('mainFilter.defaultInputOptions'); 

if (!$defaultInputOptions->isHit()) { 
     // collect data, format etc. 
     $expiration = new \DateInterval('P1D'); 
     $defaultInputOptions->expiresAfter($expiration); 
     $cache->save($defaultInputOptions); 
} else { 
     return $defaultInputOptions->get(); 
} 

Aber wenn ich in etwas ändern 'Daten sammeln, Format usw.' auf meinem Rechner und danach make deploy (git pull, Composer installieren, bin/console cache: löschen ...) dann hat neue Version auf dem Server noch gültigen Cache (1 Tag) und nehmen Daten von ihm ...

+0

Warum ./bin/console cache: clear ist nicht genug? – sensorario

+0

In Frage ist Update - Beispiel und Erklärung. –

Antwort

1

Sie können einen beliebigen Service machen möchten Sie die Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface implementieren von symfony nativen Cache verwendet werden: klare

use Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface; 
use Symfony\Component\Cache\Adapter\AdapterInterface; 

final class SomeCacheClearer implements CacheClearerInterface 
{ 
    private $cache; 

    public function __construct(AdapterInterface $filesystemAdapter) 
    { 
     $this->cache = $filesystemAdapter; 
    } 

    public function clear($cacheDir) 
    { 
     $this->cache->clear(); 
    } 
} 

Config erfolgt durch das Tag kernel.cache_clearer

cache_provider.clearer: 
    class: AppBundle\Path\SomeCacheClearer 
    arguments: 
     - 'my_app_cache' 
    tags: 
     - { name: kernel.cache_clearer } 

EDIT: Präzision über Cache als Dienstleistung:

Ihr Cache-Dienst wie die

my_app_cache: 
    class: Symfony\Component\Cache\Adapter\FilesystemAdapter 

definiert werden konnte oder wenn Sie

my_app_cache: 
    class: Symfony\Component\Cache\Adapter\FilesystemAdapter 
    arguments: 
     - 'my_cache_namespace' 
     - 30 #cache ttl (in seconds) 

So einen Namespace und ttl angeben möchten, sollten Sie nicht verwenden

$cache = new FilesystemAdapter(); 

Aber mit -Service-Injektion

$cache = $this->get('my_app_cache'); 
+0

Hallo THX für die Antwort. Ich muss 'symfony \ Component \ Cache \ Adapter \ AdapterInterface;' hinzufügen und in Argumenten '@ cache.app' angeben. Aber es funktioniert nicht - kein Fehler und nach 'bin/console cache: clear' werden noch Daten aus dem gültigen Cache geladen –

+0

Wenn Sie einen Haltepunkt oder einen' var_dump ("called"); exit; 'in method clear() setzen, heißt es? – goto

+0

in der Konsole sehe ich "angerufen" so ja –

0

Am Ende - genügt bearbeiten nur services.yml und fügen:

appbundle.cachecomponent.clearall: 
    class: Symfony\Component\Cache\Adapter\FilesystemAdapter 
    tags: 
     - { name: kernel.cache_clearer } 

: Ich bin in symfony so i das ist richtige Lösung hoffen.

Verwandte Themen