Ankündigung

Einklappen
Keine Ankündigung bisher.

Cache-Verwaltung Entscheidungsproblem

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cache-Verwaltung Entscheidungsproblem

    Ich hab derzeit ein Problem mit der Entscheidung, wo ich meine Verwaltung für das Cachen allg. hinschiebe. Ich schreibe gerade aus Studienzwecken heraus einen RSS-Reader fürs Web. Die Abfragen der RSS-Feeds möchte ich gern z.b. für 1h cachen. Daraus ergeben sich viele Fragen.

    Ist es sinnvoll die Klassen, welche die RSS liest den Cache verwalten zu lassen?
    Sollte man den Cache allg. zentral verwalten und die Klasse, welche liest, weiss davon nix?
    Falls man die Klassen den RSS-Cache verwalten lasst. Sollte man Status-Informationen nach Außen zugreifbar machen, dass die Information aus dem Cache kommt?

    Ich tendiere ja noch leicht dazu alles in der Klasse zu organisieren. Die RSS-Klasse muss dann auch mehr Konfigurationsdaten aufnehmen, denn der Ort fürs Cachen muss auch geprüft werden und bekannt gemacht werden.
    Mir fehlt einfach die Erfahrung, das Vorgehen im Moment korrekt einzuschätzen. Welche Punkte sollte man in einer Entscheindungsmatrix übernehmen?

    bitcoin.de <- Meine Freelancerwährung


  • #2
    Schau dir doch mal den PSR Standard zum Thema cache an. Wenn du die Interface so implementierst, ist dein Cache allgemein gültig und bei Bedarf auch leicht austauschbar.
    https://www.php-fig.org/psr/psr-6/
    https://www.php-fig.org/psr/psr-16/

    Kommentar


    • #3
      An welcher Stelle soll denn das Interface angehangen werden? Bezogen auf mein konkreten Problem.
      bitcoin.de <- Meine Freelancerwährung

      Kommentar


      • #4
        Du schreibst eine Cache Klasse welche das Interface Implementiert und übergibst diese im Conrstuctor deiner RSS Klasse. So kannst du den Cache in deiner RSS Klasse beliebig austauschen ohne das du deine RSS Klasse anpassen musst.
        Falls du deine Cache Klasse nicht selber entwickeln willst, gibt es auch bereits sehr viele fertige Implementierungen wie z.B.:
        https://symfony.com/doc/current/components/cache.html
        http://www.php-cache.com/en/latest/

        Kommentar


        • #5
          Zitat von Alpha Beitrag anzeigen
          Ist es sinnvoll die Klassen, welche die RSS liest den Cache verwalten zu lassen?
          Von mir dazu ein klares nein. Die Aufgabe der RSS-Klasse sollte sein sich um das Einlesen der RSS zu kümmern und nicht noch zig. Randaufgaben erfüllen.

          Zitat von Alpha Beitrag anzeigen
          Sollte man den Cache allg. zentral verwalten und die Klasse, welche liest, weiss davon nix?
          Nach meinen Erfahrungen ja.

          Zitat von Alpha Beitrag anzeigen
          Ich tendiere ja noch leicht dazu alles in der Klasse zu organisieren.
          Nein. Eine Klasse sollte nicht zuviel machen.

          Habe in meiner Anfangszeit auch das Caching mit in Klassen implementiert,. Nie benutzt, da zu unflexibel. Nutze aktuell eine ganz einfache Cache-Klasse auf File-Basis:
          PHP-Code:
           /*
            * create new strcache object
            * param $fct callbackfunktion, must return new content
            * param $fileName filename for cachefile (default strcache.dat)
            */
            
          public function __construct($fct,$fileName null)
            {
              
          //...
            
          }

           
          /*
            * maxAge: rel. DateTime
            * return Cache as string, "" if error
            * if Cache older as maxAge, $fct called to fetch new Content
            * More see Method Status
            */  
            
          public function getContent($maxAge "0 Sec")
            {
              
          //...
            

          Nutze die Klasse vorrangig zum Cachen von Webservice-API's wie z.B. Wetterdaten.





          PHP-Klassen auf github

          Kommentar


          • #6
            Ist vielleicht nicht ganz nach deinen Vorstellung, aber ich will es auch nur der Vollständigkeit halber erwähnen, weil du
            Sollte man den Cache allg. zentral verwalten und die Klasse, welche liest, weiss davon nix?
            erwähnt hast.

            Man kann auch das dem Apache Server überlassen und in der htaccess für jeden Mimetyp getrennt die Cachezeiten festlegen.
            http://httpd.apache.org/docs/current...d_expires.html

            Beispiel htaccess
            Code:
            <IfModule mod_expires.c>
                ExpiresActive On
                ExpiresDefault "access plus 1 seconds"
                ExpiresByType text/css "access plus 1 minute"
                ExpiresByType text/javascript "access plus 1 week"
                ExpiresByType application/javascript "access plus 1 week"
                ExpiresByType application/x-javascript "access plus 1 week"
                ExpiresByType text/html "access plus 1 month"
                ExpiresByType application/rss+xml "access plus 1hour"
            </IfModule>
            Hier wird für rss das Caching für 1 Stunde festgelegt, für CSS Dateien aber nur 1 Minute.

            Nachteil ist natürlich, das es mit anderen Servern nicht läuft und man evtl. dann auch das vorab prüfen muss bzw. Alternativen vorhalten...

            Kommentar


            • #7
              Der Apache cached aber nichts, sondern setzt nur die entsprechenden HTTP-Header.
              Das Cachen selbst übernimmt ein Client (Browser, Proxy ect).

              Grüße.

              Kommentar


              • #8
                OK, habe ich dann wohl missverstanden, ich ging davon aus, dass er das Cachen des Client und damit den header beeinflussen wollte.

                Kommentar


                • #9
                  Zitat von php1704 Beitrag anzeigen
                  Der Apache cached aber nichts, sondern setzt nur die entsprechenden HTTP-Header.
                  Das Cachen selbst übernimmt ein Client (Browser, Proxy ect).

                  Grüße.
                  auch wenn das wohl nichst mit dem thema zu tun hat, so kann ich das nicht stehen lassen:

                  https://httpd.apache.org/docs/2.4/caching.html

                  Kommentar


                  • #10
                    Wäre cool, wenn ihr das Thema an der Abschweifstelle trennt und in einen Faden setzt.
                    bitcoin.de <- Meine Freelancerwährung

                    Kommentar


                    • #11
                      Das Thema hier ist ja irgendwie noch offen. Oder ist das Problem für dich gelöst und wenn ja wie würde mich interessieren?
                      Und wer ist ihr die das Thema wie und wo trennen sollen?
                      PHP-Klassen auf github

                      Kommentar

                      Lädt...
                      X