Maison >développement back-end >tutoriel php >PHP implémente la fonction de partage de session sous équilibrage de charge

PHP implémente la fonction de partage de session sous équilibrage de charge

不言
不言original
2018-04-17 14:31:201448parcourir

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

Cet article. explique les exemples PHP est utilisé pour réaliser 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 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();

Recommandations associées :

PHP implémente un simple verrouillage de document Redis et empêche les appels répétés simultanés

Méthode PHP pour obtenir dynamiquement les paramètres de fonction

Méthode PHP pour obtenir un fichier MIME classe d'outils exemple_php conseils

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