memcache und mehrere seiten z.B. Gästebuch

Ibimar

Grünschnabel
Halli hallo,

ich habe eine frage und zwar habe ich mit memcache angefangen und speichere zb mein userprofil als array in dem arbeitsspeicher ab. das klappt auch gut da

$key = user_ID

jetzt möchte ich zb sein gästebuch auch abspeichern und nicht jedes mal die DB aufrufen sofern nichts neues geschrieben worden ist.

nur wie mache ich das am besten bei mehreren seiten zb. user videos, gruppen etc.

seite 1, 2,3 usw

Vielleicht kann mir jemand schnell helfen :) danke
 
ich habe mein projekt schon fast fertig und benutze kein Framework :) aber danke .. noch jemand einen anderen Lösungsansatz?
Danke
 
Naja, prinzipiell läuft es immer nach dem Schema ab:

- Versuche Daten aus dem Cache zu holen.
- Sind keine Daten im Cache, lade sie aus der persistenten Datenquelle und legen sie in den Cache
- Wird ein Datensatz geändert, also in der persisten Datenquelle gelöscht, verändert oder neu hinzugefügt, muss der Cache invalidiert werden und es geht von vorne los.
 
ja aber mir fehlt der ansatz.. wie seiten (seite) in cache speichern .. zb 100 seiten.. bei änderung alle seiten auslesen und neu speichern? performancetechnisch auch nicht schön
 
Da du es auf Seiten aufgeteilt hast, könntest du es so machen:

- Wenn eine Seite angezeigt wird, versuche die Datensätze der Seite aus dem Cache zu lesen
- Wenn im Cache nichts vorhanden ist, lese die zu Seite gehörenden Datensätze aus der DB und lege sie im Cache ab
- Stelle die Seite dar

Kaum ein Leser wird alle Seiten lesen. Daher hast du auch keine 100 Seiten im Cache.

Memcached ist für den Anwendungsfall in meinen Augen eh unsinnig. Ich würde es statt dessen so machen:

Verwende als Cache fertige HTML-Dateien.
 
Ein Ansatz wie man es machen könnte:
PHP:
$strCacheFile = '/pfad/zum/cache/idDerSeite.html';

if ( true === is_file( $strCacheFile ) )
{
    echo file_get_contents( $strCacheFile );
}
else
{
    /* viel aufwändiger Code um Daten zu holen und in Form zu bringen */

    $strTempData = '...'; // Datenstring
    
    file_put_contents( $strCacheFile, $strTempData );
    
    echo $strTempData;
}

Gruß
 
Ein weiterer Ansatz:

PHP:
$seite = isset( $_GET['seite'] ) ? intval( $_GET['seite'] ) : 1;

$cacheFile = sprintf( "/pfad/zu/den/cache/dateien/%d.html", $seite );

if( !is_file( $cacheFile ) || ! ( $contents = file_get_contents( $cacheFile ) ) )
{
  $contents = erstelle_gaestebuch_seite_aus_db( $seite );

  file_put_contents( $cacheFile, $contents );
}

echo $contents;
 
Zurück