Redis in PHP integrieren

Redis ist ein über PHP-Befehle gesteuerter Cache, er funktioniert nicht von alleine und muss in PHP eingebunden werden. Mit Redis lassen sich Variablen und z.B. Große Tabellen im Ram ablegen.

Dieses Tut zeigt Anhand eines Beispiel wie man lang ladende Php Seiten über Redis Cached und den Cache über Veränderungen in der Datenbank aktualisiert.

Zuerst wird eine Datenbankabfrage auf das letzte Update in z.B. einer großen Tabelle gestellt. Diese Zeit nutzen wir für die Cache Aktualisierung.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$servername = "localhost";
$username = "user";
$password = "pw";
$dbname = "dba";
$last=0;
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

//fetch last update date
$sql = "SELECT id,updated FROM animals WHERE 1 ORDER BY updated DESC  LIMIT 1";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()){
//Speicher den letzten Update Zeitpunkt
$last= $row["updated"];}} else {}

Jetzt erstellen wir ein Redis Objekt und KEY, Value Paare welche Redis direkt im Ram zwischenspeichert.


1
2
3
4
5
6
7
8
$redis = new Redis();
$redis->connect( "127.0.0.1", 6379, 3.5 );

$redis_key= md5("mainsite");
//$output= auszugebender Cache Html code (wenn schon gespeichert)
$output = $redis->get($redis_key);
//im Cache gespeicherte Updatezeit aus Redis lesen
$lastdate= $redis->get("lastdate");

Jetzt vergleichen wir die gerade in mysql ausgelesene letzte Tabellenupdate Zeit mit der von Redis gespeicherten Zeit und generieren die Seite für den cache neu wenn sich diese unterscheiden.


1
2
3
4
5
6
7
8
9
10
if($lastdate!=$last || $output==""){
$redis->set("lastdate",$last);
ob_start(); //Gebe nichts aus, und buffere alle Ausgaben
echo sys_execute('.',array()); //Irgendeine aufwendige CMS funktion
$output = ob_get_contents(); //Schreibe alles gebufferte in Output
ob_clean();
$redis->set($redis_key,$output); //Speichere die neue Seite in den redis Ram
}
//Wenn Cache und mysql Tabelle gleichalt dann direkt aus dem Cache.
echo $output; //Gebe die Seite aus.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Denkhilfe *

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.