Maison  >  Article  >  développement back-end  >  PHP implémente la fonction de partage de session sous les compétences PHP d'équilibrage de charge

PHP implémente la fonction de partage de session sous les compétences PHP d'équilibrage de charge

jacklove
jackloveoriginal
2018-06-27 17:46:392515parcourir

Cet article présente principalement la fonction de partage de session sous équilibrage de charge en PHP, et analyse les techniques d'implémentation associées du partage de session basé sur Memcache de PHP sous forme d'exemples. Les amis dans le besoin peuvent s'y référer

Le. les exemples dans cet article décrivent PHP implémente la fonction de partage de session sous équilibrage de charge. Je le partage avec vous pour votre référence. Les détails sont les suivants :

J'ai récemment été occupé à développer le programme de la quatrième édition de Taiwan Sports Lottery, donc je n'ai rien écrit depuis longtemps. Aujourd'hui, je viens d'écrire quelque chose à partager avec vous.

Tout d'abord, parlons de l'équilibrage de charge. Je pense que tout le monde sait que l'équilibrage de charge peut résoudre le problème du trafic important sur les sites Web. PC polymorphes pour le traitement. Puisque la requête est distribuée, la session doit être prise en compte. Bonne solution Traditionnellement, PHP stockera la session dans le fichier temporaire local, mais dans ce cas, la session sera perdue après distribution. La solution la plus simple consiste à utiliser Memcache pour l'héberger et à configurer un serveur séparé. Il est utilisé comme serveur Memcache (il est préférable d'avoir une plus grande mémoire), et le travail suivant peut être laissé au code PHP. je veux modifier php.ini ici, car ce serait trop fatiguant de le changer pour chaque serveur, et je suis paresseux

Peut-être me direz-vous qu'il suffit de modifier l'emplacement de stockage de la session de php.ini pour écrire dans memcache Oui, c'est vrai, mais vous ne pouvez pas appeler gc de cette façon. Libérez la session expirée, et ce dont nous voulons parler aujourd'hui n'est pas seulement de la laisser être hébergée, mais aussi de la laisser. libère automatiquement la session.

Puisque vous voulez le faire, vous devez le faire parfaitement Voici le mien Code, je ne sais pas lire les commentaires par vous-même :

$_ENV=array(
  'SYS'=>array(
    'Memip'=>'127.0.0.1',      //MEMCACHE的ip
    'Mempt'=>11211,       //MEMCACHE的port
    'Memtim'=>10,          //MEMCACHE的超時時間
  )
);
//托管SESSION到MEMCACHE,如果开启失败,则说明MEMCACHE没有配置正确
final class S{
  public static function open(){
  //禁止session自动开启
    session_write_close();
  ini_set('session.auto_start',0);
  //使用五十分之一的概率启动gc清理会话
  ini_set('session.gc_probability',1);
  ini_set('session.gc_pisor',50);
  ini_set('session.use_cookies',1);
  //session的寿命
  //ini_set('session.gc_maxlifetime',$_ENV['SYS']['Memtim']);
  //ini_set('session.cookie_lifetime',$_ENV['SYS']['Memtim']);
  //ini_set('session.save_handler','files');
  //ini_set('session.save_path',Run.'_tmp');
  //ini_set('session.save_handler','memcache');
  //ini_set('session.save_path','tcp://127.0.0.1:11211');
    //$_ENV['S_tim'] = ini_get('session.gc_maxlifetime');
  //建立memcache对象
  $_ENV['S_mem']=new Memcache;
  $_ENV['S_mem']->connect($_ENV['SYS']['Memip'],$_ENV['SYS']['Mempt']) or die('Memcache連接失敗!');
    return TRUE;
  }
  /**
    读取
    返回:读到的內容
  /**/
  public static function read($id){
    return $_ENV['S_mem']->get('s_'.$id);
  }
  /**
    写入
    返回:bool
  /**/
  public static function write($id,$data){
    return $_ENV['S_mem']->set('s_'.$id,$data,MEMCACHE_COMPRESSED,$_ENV['SYS']['Memtim']);
  }
  /**
    关闭
    返回:bool
  /**/
  public static function close(){
    $_ENV['S_mem']->close();
    unset($_ENV['S_mem'],$_ENV['SYS']['Memtim']);
    return TRUE;
  }
  /**
    刪除
    返回:bool
  /**/
  public static function destroy($id){
    return $_ENV['S_mem']->delete('s_'.$id);
  }
  /**
    清理
    返回:bool
  /**/
  public static function gc(){
    return TRUE;
  }
}
session_set_save_handler('S::open','S::close','S::read','S::write','S::destroy','S::gc');
$_ENV['sessionid']=(isset($_REQUEST['sessionid'])) ? trim($_REQUEST["sessionid"]) : session_id();
if($_ENV['sessionid']!=''){session_id($_ENV['sessionid']);}
session_start();

Articles qui pourraient vous intéresser :

php compétences illimitées en matière d'implémentation de code d'imbrication de commentaires php

PHP réalise la fonction d'ajout, de suppression, de vérification et de modification de la base de données et de l'exemple de code complet php

PHPMAILER implémente la fonction de messagerie PHP exemple php

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn