Heim  >  Artikel  >  Backend-Entwicklung  >  So speichern Sie eine PHP-Sitzung in Redis

So speichern Sie eine PHP-Sitzung in Redis

藏色散人
藏色散人nach vorne
2019-01-09 13:55:243562Durchsuche

PHP unterstützt standardmäßig das Speichern von Sitzungen auf Redis ohne zusätzlichen Code.

Der von Redis zum Speichern der Sitzung verwendete Befehl ist setex, der mit dem Redis-Cli-Monitor zur Echtzeitüberwachung erkannt werden kann.

Setex-Befehlssyntax:

setex(key, time, value)

Dabei ist „key“ der Schlüsselwert, „time“ die Ablaufzeit und „value“ ein Wert vom Typ „String“.

Die spezifischen Schritte sind wie folgt.

1. Umgebung

Um eine Sitzung mit Redis zu speichern, müssen Sie zunächst die folgenden Bedingungen erfüllen:

Es muss ein Redis-Server installiert sein. In diesem Beispiel wird der lokale Server Redis verwendet, IP: 127.0.0.1, Port: 6379.

PHP hat die phpredis-Erweiterung installiert und Sie können die Erweiterung über phpinfo() sehen, wie unten gezeigt.

So speichern Sie eine PHP-Sitzung in Redis

PHP kann normal auf Redis zugreifen. Der Testcode lautet wie folgt:

<?php
    $redis = new Redis();
    $redis->connect(&#39;127.0.0.1&#39;, 6379);
    $count = $redis->exists(&#39;count&#39;) ? $redis->get(&#39;count&#39;) : 1;
    echo $count;
    $redis->set(&#39;count&#39;, ++$count);

Aktualisieren Sie die Seite. Wenn Sie sehen, dass die Zahl zunimmt, bedeutet dies, dass die Redis-Umgebung normal ist.

2. Konfigurieren Sie PHP

Nach der Installation der Redis-Erweiterung sehen Sie das Session-Support-Handle in der phpinfo()-Ausgabe, die Redis enthält, wie folgt:

So speichern Sie eine PHP-Sitzung in Redis

Zu beachten ist, dass die maximale Ablaufzeit von Redis 2147483647 beträgt, was 7fffffff im Hexadezimalformat entspricht.

Daher kann der Wert der Recyclingzeit session.gc_maxlifetime in der Sitzungskonfiguration diese Zahl nicht überschreiten.

Andernfalls ist die Ablaufzeit eine negative Zahl, wenn Redis den Befehl setex zum Speichern der Sitzung verwendet, was dem direkten Löschen des Schlüssels entspricht.

Dies wird nicht nur nicht erfolgreich gespeichert, PHP gibt auch den folgenden Fehler zurück:

Warning: Unknown: Failed to write session data (redis). Please verify that the current setting of session.save_path is correct (127.0.0.1:6379) in Unknown on line 0

Als nächstes ändern Sie die PHP-Konfiguration. Wählen Sie eine der folgenden Methoden.

2.1 php.ini ändern

Öffnen Sie die php.ini-Datei und legen Sie die folgenden zwei Werte fest:

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

Wenn Redis ein Passwort hat, verwenden Sie die folgende Konfiguration:

session.save_path = "tcp://127.0.0.1:6379?auth=password"

Nachdem die Konfiguration abgeschlossen ist, starten Sie PHP-FPM neu.

2.2 Ändern Sie php-fpm.conf

PHP-FPM-Konfigurationsdatei /etc/php-fpm.conf oder /etc/php-fpm.d/* In .conf, es gibt auch eine Sitzungskonfiguration.

Ihre Sitzungskonfiguration hat eine höhere Priorität als php.ini und überschreibt die Konfiguration in php.ini.

Ändern Sie es also direkt hier:

php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://127.0.0.1:6379"

Wenn Sie die php.ini-Konfiguration verwenden, müssen Sie diese beiden Zeilen mit ; ​​auskommentieren.

Dann PHP-FPM neu starten

2.3 PHP-Code

Sie können die Sitzung auch im laufenden PHP-Code wie folgt konfigurieren.

ini_set(&#39;session.save_handler&#39;, &#39;redis&#39;);
ini_set(&#39;session.save_path&#39;, &#39;tcp://127.0.0.1:6379&#39;);

3. Testen Sie

Schreiben Sie einen Teil des PHP-Testcodes wie folgt:

session_start();
$count = isset($_SESSION[&#39;count&#39;]) ? $_SESSION[&#39;count&#39;] : 1;
echo $count;
$_SESSION[&#39;count&#39;] = ++$count;

Wenn Sie die Seite aktualisieren und sehen, dass die Zahlen angezeigt werden Steigt die Zahl weiter an, bedeutet dies, dass Redis so konfiguriert werden muss, dass die Sitzung erfolgreich gespeichert wird.

PHP-Lernthema für chinesische Websites: PHP-Sitzung (einschließlich Bilder, Videos, Fälle)

Das obige ist der detaillierte Inhalt vonSo speichern Sie eine PHP-Sitzung in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:歪麦博客. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen