Caching von Objekten

  • Wenn es sich um Datenobjekte handelt sollte dies kein Problem sein.

    Bei richtig Instanziierten Objekten ist das so eine Sache. hier musst du auch aufpassen ob es Sinn macht solche Objekte mit serialize / unserialize zu Cachen.


    Die Sache ist, die Klasse sollte dann schon __wake und __sleep als Magic Methode mitbringen, es könnte dann sein dass das nicht ganz so funktioniert wie du das möchtest. Zusätzlich bin ich mir nicht sicher was serialize mit inharitance Objekten macht (Also Objekte im Objekt). Wenn das dann durch serialisiert wird, wird es plötzlich recht viel ... das ganze muss dann auch interpretiert werden. Hier solltest du dann echt auf die Performance achten.


    Wenn stark serialisiert wird und das dann im RAM liegt und du kräftig Besucher hast, wirst du wahrscheinlich deine Last runter bringen.

    Dein Bottleneck wird aber meist bei so Sachen sein wie

    • DNS Auflösung / Anfragen zu anderen Rechnern
    • Datenbank Anfragen

    Hier lassen sich bessere Caching-Methoden anwenden, nen Query Cache macht da meist einiges aus. Also was ich sagen will, wenn du direkt an deinem Bottleneck ein minimalen Cache einsetzt, anstatt Mega Objekte zu cachen, hast du weniger Stress :-) Also wenn du richtige Klassen cachen möchtest solltest du mehrmals drüber nachdenken ob dir der Aufwand es wert ist.

  • Hi,


    Caching von Objekten sollte in den meisten Fällen problemlos funktionieren.

    Allerdings empfiehlt es sich besonders auf die Objekte zu achten, da große Objekte sehr schnell enorm große Caching Dateien erzeugen und so zu Problemen führen können.


    Wenn du allerdings nur Datenobjekte cachest sollte dies einfach funktionieren.


    Ein Beispiel, wie du richtig Cachen kannst:

    Code: CacheBeispiel.php
    1. // Speichere $data für einen Tag im Cache
    2. \QUI\Cache\Manager::set("frei/waehlbarer/cache/name",$data,86400);
    3. // Versuche die Daten direkt aus dem Cache zurück zu geben
    4. try{
    5. return \QUI\Cache\Manager::get("frei/waehlbarer/cache/name");
    6. }catch(\Exception $Exception){
    7. // Im Cache wurde nichts gefunden
    8. }