PHP-Entwicklung: So verwenden Sie Redis zum Verwalten von Sitzungen

王林
Freigeben: 2023-06-14 19:34:01
Original
1324 Leute haben es durchsucht

Da der Website-Verkehr zunimmt, muss der Backend-Server Tausende von Benutzersitzungen verwalten. Diese Aufgabe ist sehr ressourcenintensiv für den Server, da der herkömmliche Ansatz darin besteht, Sitzungsdaten in einem Dateisystem auf dem Server zu speichern. Mit der Weiterentwicklung der Technologie und dem Aufkommen von Redis können wir Redis nun jedoch zur Sitzungsverwaltung nutzen und so die Serverleistung und -zuverlässigkeit verbessern.

Redis ist eine effiziente In-Memory-Datenbank, die das Speichern und Abrufen verschiedener Datenstrukturen unterstützt. Redis selbst ist in C geschrieben, unterstützt jedoch Client-Bibliotheken in mehreren Sprachen, sodass PHP-Anwendungen Redis problemlos verwenden können. In diesem Artikel erfahren Sie, wie Sie mit Redis Sitzungen für PHP-Anwendungen verwalten.

Traditionelle Sitzungsverwaltung

Bei der herkömmlichen Sitzungsverwaltung erstellt die PHP-Anwendung beim Anmelden eines Benutzers eine eindeutige Sitzungs-ID und speichert sie im Cookie des Browsers. Anschließend speichert PHP die Sitzungsdaten im Dateisystem des Servers und ruft die Daten beim nächsten Besuch der Website durch den Benutzer ab. Dieser Ansatz hat einige Nachteile:

  1. Festplatten-E/A-Vorgänge verbrauchen Ressourcen. Jedes Mal, wenn Sitzungsdaten auf die Festplatte geschrieben oder von dieser abgerufen werden, findet ein E/A-Vorgang statt, der mehr CPU- und Speicherressourcen beansprucht.
  2. Sitzungsdaten werden auf einem einzigen Server gespeichert. Wenn eine Anwendung auf mehreren Servern ausgeführt wird, wird die gemeinsame Nutzung von Sitzungsdaten zwischen Servern schwierig.
  3. Das Dateisystem kann ausfallen. Bei hohem Zugriffsvolumen können Dateisperren und Datei-E/A-Vorgänge zu Leistungsengpässen führen.
  4. Sichern und Wiederherstellen von Sitzungsdaten wird schwieriger. Wenn Sie den Server sichern oder neu erstellen müssen, müssen alle Sitzungsdaten gesichert und wiederhergestellt werden.

Daher brauchen wir eine bessere Möglichkeit zur Sitzungsverwaltung, die Aspekte wie Leistung, Zuverlässigkeit und Skalierbarkeit optimieren sollte.

Gründe für die Beliebtheit von Redis

Redis ist eine beliebte NoSQL-Datenbank, da sie die folgenden Vorteile bietet:

  1. Redis wird im Speicher gespeichert. Im Vergleich zu herkömmlichen Dateisystemen ist der Speicherzugriff schneller.
  2. Redis unterstützt mehrere Datenstrukturen (Strings, Hash-Tabellen, Listen, Mengen und geordnete Mengen). Dadurch wird Redis flexibler und kann verschiedene Datentypen zum Speichern und Verwalten von Sitzungsdaten verwenden.
  3. Redis unterstützt persistenten Speicher. Redis kann Daten auch dann auf der Festplatte speichern, wenn der Server abstürzt oder stoppt.

Wenn Sie also Redis zum Verwalten der Sitzungen einer Anwendung verwenden, müssen Sitzungsdaten nicht mehr im Dateisystem gespeichert werden. Stattdessen können wir Sitzungsdaten im Redis-Speicher speichern und so die Leistung und Zuverlässigkeit verbessern.

Verwenden Sie Redis zum Verwalten von Sitzungen in PHP-Anwendungen

Im Folgenden erklären wir, wie Sie Redis zum Verwalten von Sitzungsdaten in PHP-Anwendungen verwenden.

Installation und Konfiguration der Redis-Erweiterung

Zuerst müssen Sie feststellen, ob PHP die Redis-Erweiterung installiert hat. Wenn sie nicht installiert ist, müssen Sie sie herunterladen und installieren.

Unter Debian/Ubuntu können Sie den folgenden Befehl verwenden, um die Redis-Erweiterung zu installieren:

sudo apt-get install php-redis
Nach dem Login kopieren

Unter CentOS/RHEL können Sie den folgenden Befehl verwenden, um die Redis-Erweiterung zu installieren:

sudo yum install php-redis
Nach dem Login kopieren

Nach der Installation der Redis-Erweiterung benötigen Sie um es in der PHP-Konfigurationsdatei zu installieren. Aktivieren Sie es. Fügen Sie der php.ini-Datei die folgende Zeile hinzu:

extension=redis.so
Nach dem Login kopieren

Implementing Redis Session Management

Als nächstes müssen wir die Art und Weise ändern, wie die PHP-Anwendung Sitzungen speichert, sodass sie Redis als Datenspeicher verwendet.

In PHP-Anwendungen gibt es einen Sitzungshandler zum Verwalten von Sitzungsdaten. Daher müssen wir einen benutzerdefinierten Sitzungshandler erstellen, um Sitzungsdaten mithilfe von Redis zu speichern und abzurufen. Hier ist ein einfacher benutzerdefinierter Sitzungshandler:

<?php
class RedisSessionHandler implements SessionHandlerInterface
{
    private $client;
    private $ttl;

    public function __construct($client, $ttl = 1440)
    {
        $this->client = $client;
        $this->ttl = $ttl;
    }

    public function open($savePath, $sessionName)
    {
        return true;
    }

    public function close()
    {
        unset($this->client);
        return true;
    }

    public function read($sessionId)
    {
        $result = $this->client->get($sessionId);

        return ($result === false) ? '' : $result;
    }

    public function write($sessionId, $sessionData)
    {
        return $this->client->setex($sessionId, $this->ttl, $sessionData);
    }

    public function destroy($sessionId)
    {
        return $this->client->del($sessionId);
    }

    public function gc($maxlifetime)
    {
        return true;
    }
}
?>
Nach dem Login kopieren

Dieser Code implementiert die SessionHandlerInterface-Schnittstelle von PHP. Diese Schnittstelle enthält die notwendigen Methoden zum Speichern und Abrufen von Sitzungsdaten mithilfe von Redis. Im obigen Code verwenden wir den Befehl setex von Redis, um die Ablaufzeit der Sitzung festzulegen. Der Gültigkeitszeitraum einer Sitzung kann durch Ändern der Variablen $ttl (Expiration Time) geändert werden.

Konfigurieren Sie PHP, um den benutzerdefinierten Sitzungshandler aufzurufen.

Abschließend müssen Sie PHP anweisen, den benutzerdefinierten Sitzungshandler aufzurufen, um Sitzungsdaten in Redis zu speichern und abzurufen. Dies kann in einer PHP-Anwendung mit dem folgenden Code erreicht werden:

<?php
require_once('RedisSessionHandler.php');
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redisHandler = new RedisSessionHandler($redis, 86400);

session_set_save_handler($redisHandler);
session_start();
?>
Nach dem Login kopieren

Im obigen Code erstellen wir eine Redis-Verbindung und übergeben sie an den benutzerdefinierten Sitzungshandler. Anschließend konfigurieren wir die benutzerdefinierte Handlerfunktion mithilfe der Funktion session_set_save_handler() von PHP als Standard-Sitzungshandler von PHP. Zum Schluss rufen wir session_start() auf, um den Session-Handler zu starten.

Fazit

In diesem Artikel haben wir besprochen, wie man Redis zum Verwalten von Sitzungen für PHP-Anwendungen verwendet. Das Speichern von Sitzungsdaten im Redis-Speicher führt zu besserer Leistung, Zuverlässigkeit und Skalierbarkeit. Durch die Erstellung eines benutzerdefinierten Sitzungshandlers können wir Sitzungsdaten aus einer PHP-Anwendung in Redis speichern, um sie zwischen mehreren Servern oder virtuellen Maschinen zu teilen. Abschließend haben wir gezeigt, wie man mit der in PHP integrierten Funktion session_set_save_handler() einen benutzerdefinierten Redis-Sitzungshandler konfiguriert.

Das obige ist der detaillierte Inhalt vonPHP-Entwicklung: So verwenden Sie Redis zum Verwalten von Sitzungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!