Heim  >  Artikel  >  Backend-Entwicklung  >  PHP verwendet Redis anstelle einer Datei zum Speichern der Sitzung

PHP verwendet Redis anstelle einer Datei zum Speichern der Sitzung

墨辰丷
墨辰丷Original
2018-05-25 14:35:181773Durchsuche

In diesem Artikel wird hauptsächlich vorgestellt, wie PHP Redis anstelle von Dateien zum Speichern von Sitzungen verwendet. Er analysiert die grundlegenden Betriebsmethoden von Sitzungen und verwandte Techniken zur Verwendung von Redis zum Speichern von Sitzungen in Form von Beispielen

Das Beispiel in diesem Artikel beschreibt, wie PHP Redis anstelle von Dateispeicher zum Speichern von Sitzungen verwendet. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

PHP verwendet standardmäßig Dateien zum Speichern von Sitzungen. Wenn die Parallelität groß ist, ist die Effizienz sehr gering. UndRedis unterstützt eine hohe Parallelität sehr gut, sodass Sie Redis verwenden können, um Dateispeichersitzungen zu ersetzen.

Hier stellen wir die Funktion und Verwendung der session_set_save_handler -Funktion von PHP vor. Diese Funktion definiert Funktionen zum Speichern von Sitzungen auf Benutzerebene (z. B. Öffnen, Schließen, Schreiben usw.).

Der Prototyp lautet wie folgt:

bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)

session_set_save_handler-Funktionsparameter lauten wie folgt:


Parameter Beschreibung
offen Wird aufgerufen, wenn die Sitzung läuft habe diese Funktion geöffnet. Empfängt zwei Parameter. Der erste Parameter ist der Name der Sitzung.
close Diese Funktion wird aufgerufen, wenn die Der Sitzungsvorgang ist abgeschlossen. Empfängt keine Parameter.
read verwendet die Sitzungs-ID als Parameter. Erhalten Sie Daten von der Datenspeicherpartei über die Sitzungs-ID und geben Sie diese Daten zurück. Wenn die Daten leer sind, kann eine leere Zeichenfolge zurückgegeben werden. Diese Funktion wird vor dem Aufruf von <span style="font-family:新宋体">session_start</span>
write beim Speichern von Daten ausgelöst.Es gibt zwei Parameter, einer ist die Sitzungs-ID, der andere sind die Sitzungsdaten
destroy Die Zerstörung wird ausgelöst, wenn <span style="font-family:新宋体">session_destroy</span> Funktion heißt Funktion. Es gibt nur einen Parameter Sitzungs-ID
gc Wird ausgelöst, wenn PHP den Sitzungs-Garbage-Collection-Mechanismus ausführt


Bevor Sie diese Funktion verwenden, setzen Sie die Option session.save_handler in der Konfigurationsdatei php.ini auf user, andernfalls wird session_set_save_handle nicht wirksam.

Schreiben Sie eine Sitzungsverwaltungsklasse sessionManager.php. Der Code lautet wie folgt:

<?php
class SessionManager{
 private $redis;
 private $sessionSavePath;
 private $sessionName;
 private $sessionExpireTime=30;//redis,session的过期时间为30s
 public function __construct(){
 $this->redis = new Redis();//创建phpredis实例
 $this->redis->connect(&#39;127.0.0.1&#39;,6379);//连接redis
 $this->redis->auth("107lab");//授权
 $retval = session_set_save_handler(
  array($this,"open"),
  array($this,"close"),
  array($this,"read"),
  array($this,"write"),
  array($this,"destroy"),
  array($this,"gc")
 );
 session_start();
 }
 public function open($path,$name){
 return true;
 }
 public function close(){
 return true;
 }
 public function read($id){
 $value = $this->redis->get($id);//获取redis中的指定记录
 if($value){
  return $value;
 }else{
  return &#39;&#39;;
 }
 }
 public function write($id,$data){
 if($this->redis->set($id,$data)){//以session ID为键,存储
  $this->redis->expire($id,$this->sessionExpireTime);//设置redis中数据的过期时间,即session的过期时间
  return true;
 }
 return false;
 }
 public function destroy($id){
 if($this->redis->delete($id)){//删除redis中的指定记录
  return true;
 }
 return false;
 }
 public function gc($maxlifetime){
 return true;
 }
 public function __destruct(){
 session_write_close();
 }
}

Der SessionManager-Konstruktor wird hauptsächlich verwendet Stellen Sie eine Verbindung zum Redis-Server her. Verwenden Sie die Funktion session_set_save_handler, um die Sitzungsrückruffunktion festzulegen, und rufen Sie die Funktion session_start auf, um die Sitzungsfunktion zu aktivieren. Da die Callback-Funktionen open, close und gc in diesem Beispiel nicht sehr nützlich sind, geben sie direkt true zurück.

Verwenden Sie in der Funktion „Rückruf schreiben“ die Sitzungs-ID als Schlüssel, speichern Sie die Sitzungsdaten als Wert auf dem Redis-Server und legen Sie die Ablaufzeit der Sitzung auf 30 Sekunden fest. Verwenden Sie in der Leserückruffunktion die Sitzungs-ID als Schlüssel, um Daten vom Redis-Server zu lesen und diese Daten zurückzugeben. In der Destroy-Callback-Funktion wird die Sitzungs-ID als Schlüssel zum Löschen der entsprechenden Sitzungsdaten vom Redis-Server verwendet.

Zur Verwendung schließen Sie einfach die SessionManager-Klasse ein und instanziieren ein SessionManager-Objekt. Erstellen Sie unten eine session_set.php-Datei. Geben Sie den Code

<?php
 include(&#39;SessionManager.php&#39;);
 new SessionManager();
 $_SESSION[&#39;username&#39;] = &#39;captain&#39;;

ein, erstellen Sie dann eine session_get.php-Datei und geben Sie den folgenden Code ein:

<?php
 include(&#39;SessionManager.php&#39;);
 new SessionManager();
 echo $_SESSION[&#39;username&#39;];

Greifen Sie beim Testen zuerst auf session_set.php und dann auf session_get.php zu. Das Ausgabeergebnis lautet wie folgt:

Überprüfen Sie dann die Redis-Datenbank unten gezeigt

127.0.0.1:6379> keys *
1) "oe94eic337slnjv1bvlreoa574"
127.0.0.1:6379> get oe94eic337slnjv1bvlreoa574
"username|s:7:\"captain\";"

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, er wird für das Studium aller hilfreich sein.


Verwandte Empfehlungen:

PHP-Methode zum Erhalten von 6-stelligen Zufallszahlen, die in Redis nicht vorhanden sind

PHP-Implementierung der RedisWeibo-Methode zur Veröffentlichung von Nachrichtenwarteschlangen

Betrieb des CI-Frameworks (CodeIgniter)redisSchrittanalyse

Das obige ist der detaillierte Inhalt vonPHP verwendet Redis anstelle einer Datei zum Speichern der Sitzung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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