Cache sider med Apache server

kongen

kongemedlem
Er det noen som vet om en enkel guide for å lære caching av sider med Apache server?

Jeg har php-sider som henter data fra database, og disse vil jeg cache slik at besøkende får servert statiske html-sider.

Jeg vil at det skal sjekkes med cron for hvert 15. minutt om det er ny data i databasen, og lage cachede sider hvis det er noe nytt. Jeg vil også sjekke om det er gjort forandringer i databasen slik at gamle cachede sider må bli cachet på nytt med ny data.
 

kongen

kongemedlem
Takk, jeg skal se på denne :)

Er det også mulig å cache bare deler av en nettside? F.eks. alt unntatt annonseplasser?
 

kongen

kongemedlem
Sist redigert:

adeneo

Medlem
Lag din egen cache slik at du slipper så mange oppslag til databasen, for det er vel egentlig ikke nettlesercache du er ute etter her, men caching av resultatene fra databasen.

Du trenger uansett "persistent storage" for å lagre tidspunkt osv, og så sjekke om det er mer enn femten minutter siden sist databasen ble spurt.

Du kan bruke shmop for å lagre ting rett i minnet, og da tenker jeg på en timestamp, ikke hele resultatet fra databasen, ettersom det sikkert er av en viss størrelse siden det må caches.

Det enkleste er noe sånt som dette (pseudo kode skrevet i full fart)

PHP:
<?php 

$result = unserialize( file_get_contents('cache.txt') ); // hent data fra fil

if ( $result['time'] < strtotime("-15 minutes") ) { // hvis under 15 minutter, bruk data
    
    echo $result['html'];

}else{ // ellers, kjør database og lagre resultat til neste gang

    $db    = new PDO('localhost;dbname=testdb;charset=utf8', 'username', 'password');
    $stmt = $db->query("SELECT * FROM table");
    $res   =  $stmt->fetchAll(PDO::FETCH_ASSOC);

    $arr = array(
        "time" => date(),
        "html" => $res
    );

    file_put_contents('cache.txt', serialize( $arr ));

    echo $res;
}

hente annonsekode fra database som *ikke* skal caches 

include('bottom-cache.php'); 
?>

Du kan variere dette, lagre timestamp i minnet osv. Wordpress bruker noe av samme prinsippet for sin Transient API som gjør akkurat det samme som dette, lagrer data i en gitt periode for å slippe å generere store datasett så ofte.

Det finnes også programmer for caching av databasen til PHP, du kan sette "time to live" og andre ting for å cache ressurser i en angitt tid, og masse andre muligheter.
 
Topp