Maison > Article > développement back-end > PHP utilise Redis au lieu d'un fichier pour stocker la session
Cet article présente principalement comment PHP utilise Redis au lieu de fichiers pour stocker les sessions. Il analyse en détail les méthodes de fonctionnement de base des sessions et les techniques associées d'utilisation de Redis pour stocker les sessions sous forme d'exemples.
L'exemple de cet article décrit comment PHP utilise Redis au lieu du stockage de fichiers pour stocker la session. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
PHP utilise des fichiers pour stocker les sessions par défaut. Si le degré de concurrence est important, l'efficacité est très faible. EtRedis prend très bien en charge la simultanéité élevée, vous pouvez donc utiliser Redis pour remplacer la session de stockage de fichiers.
Ici, nous présentons la fonction et l'utilisation de la fonction session_set_save_handler
de PHP. Cette fonction définit les fonctions de sauvegarde de session au niveau utilisateur (telles que l'ouverture, la fermeture, l'écriture, etc.).
Le prototype est le suivant :
bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)
Les paramètres de la fonction session_set_save_handler sont les suivants :
Paramètres | Description |
---|---|
ouvert | Appelé lorsque la session est ouvert cette fonction. Reçoit deux paramètres. Le premier paramètre est le chemin pour maintenir la session. Le deuxième paramètre est le nom de la session |
close | Cette fonction est appelée lorsque le. l'opération de session est terminée. Ne reçoit pas de paramètres. |
read | prend l'ID de session comme paramètre. Obtenez des données de la partie de stockage de données via l'ID de session et renvoyez ces données. Si les données sont vides, une chaîne vide peut être renvoyée. Cette fonction est déclenchée avant l'appel <span style="font-family:新宋体">session_start</span> |
write | est appelée lorsque les données sont stockées.Il y a deux paramètres, l'un est l'ID de session, l'autre est les données de session |
destroy | La destruction est déclenchée lorsque le <span style="font-family:新宋体">session_destroy</span> la fonction est appelée fonction. Il n'y a qu'un seul paramètre ID de session |
gc | Déclenché lorsque php exécute le mécanisme de collecte des ordures de session |
Avant d'utiliser cette fonction, définissez l'option session.save_handler dans le fichier de configuration php.ini sur user, sinon session_set_save_handle ne prendra pas effet.
Écrivez une classe de gestion de session sessionManager.php, le code est le suivant :
<?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('127.0.0.1',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 ''; } } 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(); } }
Le constructeur SessionManager est principalement utilisé pour se connecter à Redis Pour le serveur, utilisez la fonction session_set_save_handler pour définir la fonction de rappel de session et appelez la fonction session_start pour activer la fonction de session. Étant donné que les fonctions de rappel open, close et gc dans cet exemple ne sont pas très utiles, elles renvoient directement true.
Dans la fonction de rappel d'écriture, utilisez l'ID de session comme clé, stockez les données de session comme valeur dans le serveur Redis et définissez le délai d'expiration de la session sur 30 secondes. Dans la fonction de rappel de lecture, utilisez l'ID de session comme clé pour lire les données du serveur Redis et renvoyer ces données. Dans la fonction de rappel destroy, l'ID de session est utilisé comme clé pour supprimer les données de session correspondantes du serveur Redis.
Pour l'utiliser, incluez simplement la classe SessionManager et instanciez un objet SessionManager. Créez un fichier session_set.php ci-dessous. Saisissez le code
<?php include('SessionManager.php'); new SessionManager(); $_SESSION['username'] = 'captain';
puis créez un fichier session_get.php et saisissez le code suivant :
<?php include('SessionManager.php'); new SessionManager(); echo $_SESSION['username'];
Lors du test, accédez d'abord à session_set.php, puis accédez à session_get.php. Le résultat de sortie est le suivant :
Vérifiez ensuite le. base de données redis, comme suit Montré
127.0.0.1:6379> keys * 1) "oe94eic337slnjv1bvlreoa574" 127.0.0.1:6379> get oe94eic337slnjv1bvlreoa574 "username|s:7:\"captain\";"
Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile pour l'étude de tout le monde.
Recommandations associées :
Méthode PHP pour obtenir des nombres aléatoires à 6 chiffres qui n'existent pas dans redis
Implémentation PHP de redisméthode Weibo de publication de file d'attente de messages
Fonctionnement du framework CI (CodeIgniter)redisAnalyse des étapes
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!