Keine Cache Invalidierung bei Import über das Import/Export Plugin

Ich habe jetzt schon viel bzgl. Cache und Invalidierung gelesen, allerdings weiß ich immer noch nicht wie es beim Import in Shopware 5.4.1. über das Import/Export Plugin aussieht und was eine gute Vorgehensweise wäre.

Wird die Invalidierung beim nutzen des Import/Export tatsächlich nicht angestoßen?

Zumindest ist das bei mir so. Allerdings macht das ja irgendwie keinen Sinn, da ja wohl jeder der seine Bestände und Preise ändert dies auch unmittelbar im Frontend aktualisisert haben möchte.

Aktuell leere ich jetzt meinen gesamten Cache per Cronjob einfach immer 10 Minuten nach dem Import, was zwar das Problem löst, aber quasi auch alle Vorzüge des Shopware Caching zu nichte macht. Da muss es doch eine bessere Lösung geben!
Ich habe stündlich im Schnitt ca. 2000 Artikelupdates und wenn ich den Cache nur einmal Nachts lösche hat der schon so seine 7 GB.
Hat jemand da mal einen Tipp wie man das besser machen kann?

Artikel werden doch gar nicht gecached. Genau aus diesem Grund, damit die Preise etc. immer aktuell sind.

(wenn du das nicht anders eingestellt hast).

Kannst du ja mal probieren. Im Backend einen Preis ändern. Der (sollte) sich direkt im Frondend zeigen.

Liebe Grüße

Kerstin

Hi Kerstin,

danke aber Artikel werden sehr wohl gecached, es wird nur der Cache invalidiert sobald den Artikel über das Backend bearbeitest. Leider scheint es aber nicht so zu sein wenn du Artikel z.B.: über das Backend per Mehrfachänderung oder per Import/Export Plugin bzw. per API? änderst. Obwohl das ja eigentlich selbstverständlich bzw. zu erwarten wäre.

Noch jemand eine Idee, Strategie oder Lösung?

 

 

 

sorry, du hast Recht. Ist ja dann ein wirklich sehr wichtiges Thema.

In deinem Case mag das so erstmal valide sein, generell ist aber das invalidieren von tausenden Seiten auf einmal keine gute Idee. Im Standard wird das Listing und die Detailseite ohnehin stündlich invalidiert, sodass der Preis bspw. ohnehin nach einer Stunde wieder aktuell ist. Alle Batch-Aktualisierungen haben erstmal auch keine Invalidierung, die würde man im Anschluss dann selbst machen.

Du kannst ohne Probleme auch eine Invalidierung per Shell-Script umsetzen, hier ist das bspw. beschrieben: https://forum.shopware.com/discussion/comment/215391/#Comment_215391

 

Vorschlag für zukünftige Versionen: Ein Haken im Import-Modul “Betroffene Seiten invalidieren”. (Gerne auch mit Warnhinweisen versehen.) Dann können das die Benutzer selbst entscheiden.

Hi Moritz,

du meinst also meine Lösung den kompletten Cache zu leeren wäre ganz okay für meinen Fall bei 2000 Updates die Stunde?
Und mit dem Invalidieren von tausenden von Seiten beziehst du dich wohl eher darauf weshalb Shopware die Invalidierung nicht direkt in die Batch-Aktualisiserungen eingebaut hat oder meinst du damit meine Lösung den ganzen Cache zu leeren?

Wäre es den deines Erachtens eine bessere Lösung wenn ich auf das stündliche Löschen des gesamten Caches verzichte und dafür Listing, Detailseite und Index Cache auf 10 Minuten runterschraube? Welcher Vorteil bzw. Nachteil hätte das? Was würde gecached bleiben? Contentseiten,…?

Bzgl. deines Verweises zur “Invalidierung per Shell-Script”. Diesen Beitrag hatte ich auch schon gelesen. Vorteil zu meiner Lösung ist klar, es werden nur die geänderten Produkte invalidiert so wie es eigentlich immer sein sollte. Aber welchen Vorteil bietet den dann solch eine Lösung? Da wäre es dann ja doch geschickter das Invalidieren gleich aus dem Import/Export Plugin zu triggern. Oder übersehe ich da irgendwas?

 

 

 

 

Naja, alle 10 Minuten macht auch keinen Sinn, dann kannst du den Cache auch gleich für diese Seiten deaktivieren. 

Wenn du jede Stunde 2000 Artikel hast und das 90% deiner Artikel sind, dann brauchst du die Detailseite auch nicht cachen lassen, die wäre dann ja selbst mit Cache Invalidierung maximal 1 Stunde im Cache. Zumal die automatische Cache-Invalidierung beim Speichern im Backend auch immer nur die detailseite invalidiert, und keine Einkaufswelten und Listing-Seiten.

Du hast eigentlich drei Möglichkeiten:

  • Script schreiben um jeden Artikel der auch aktualisiert wurde zu invalidieren (ggf. direkt mit Aufruf danach um den Cache neu zu erzeugen)
  • kompletten Cache nach Update leeren
  • Die Standard invalidierung nutzen, die ohnehin nach einer Stunde einsetzt.

Zusätzlich wäre eine invalidierung nach dem Update auch asynchron, das würde also quasi den Import nicht verlangsamen und kann im Nachgang passieren.
Im Import/Export müsstest du das ja auch erstmal bauen - die Lösung per Shell-Script ist individueller, da kannst du ja selbst definieren was invalidiert wird.

Hei jei jei, sehr sehr unbefriedigend was Shopware hier bietet.

Erstmal die 2000 Artikel pro Stunde sind eher 2% meiner Artikel, sonst würde ich gar nicht dran denken etwas anderes machen zu wollen als einfach den kompletten Cache zu löschen.

„Die Standard Invalidierung nutzen, die ohnehin nach einer Stunde einsetzt.“ ist auch keine Lösung, da mein Chef nach seiner Preisänderung nicht nochmal eine 1 Stunde länger warten will bis er den Preis dann auch im Shop sieht bzw. wieder fragen muss warum Artikel XY noch nicht aktualisisert wurde.
Außerdem werden ja auch etliche Exporte für Partner stündlich aktualisisert: Idealo und Co. Dort wollen die Kunden ja dann schließlich auch so zeitnahe wie möglich den gleichen Preis angezeigt bekommen wie im Shop und nicht erst eine Stunde später. Oder Sie sehen noch den günstigeren Preis auf Idealo, klicken, höherer Preis und sind weg.

„Zumal die automatische Cache-Invalidierung beim Speichern im Backend auch immer nur die detailseite invalidiert, und keine Einkaufswelten und Listing-Seiten.“ macht das ganze noch schlimmer. Aber wer alles händisch macht kann dann auch gleich noch immer per Shortcut alle Caches leeren :slight_smile:

"Script schreiben um jeden Artikel der auch aktualisiert wurde zu invalidieren (ggf. direkt mit Aufruf danach um den Cache neu zu erzeugen) " das klingt mir nach der Lösung die Shopware mir zu meinem „Professional Shop“ zu liefern hat. Ob das dann während dem Import pro Artikel aufgerufen wird oder nachdem der Import fertig gelaufen ist als Batch, ist mir relativ egal. Man könnte das Teil auch als konfigurierbaren Cronjob machen: Alles was seit letztem Lauf geändert wurde invalidieren,… Sowas muss her in einer professionellen Shopsoftware. Da brauche ich echt kein Playground, kein 3D Viewer, keine KI und kein neues Frontend Framework, wenn meine aktualisierten Produkte nicht im Frontend umgehend aktualisisert werden ohne erst ein individuelles Shellscript dafür schreiben zu müssen.

 

 

 

Naja Fakt ist, aktuell musst du es selbst lösen, da es kurzfristig nicht gelöst wird. Da können wir jetzt lange darüber diskutieren ob das im Standard gehen muss oder nicht. Ansätze habe ich dir gegeben, daraus musst du nun die für dich passende Lösung entwickeln.

Einen Feature-Request für das Plugin kannst du gerne aufmachen. 

Yo, dank dir, hat geholfen zu verstehen. Jetzt weiß ich was geht und was nicht und kenne die Möglichkeiten, das hilft ja oft schon viel.

Und Shopware hat mal wieder ein Problem der Nutzer gehört das man vielleicht angehen könnte, außer einem Customer Stream der Zubehörprodukte zu den bereits gekauften Produkten eines Kunden anzeigen kann um so richtig zu individualisiseren :wink: