この記事では、負荷分散を実現するための PHP のセッション共有機能を主に紹介し、PHP の memcache ベースのセッション共有の関連実装テクニックを例の形式で分析します。 PHPセッション共有機能における負荷分散の実装。詳細は以下のとおりです:
最近、台湾スポーツ宝くじの第 4 版のプログラムの開発で忙しかったので、長い間何も書いていませんでした。皆さんと共有したいことがあります。まず、負荷分散について話しましょう。負荷分散は、ユーザーのリクエストをポリモーフィックな PC に分散して処理することで効果的に解決できることを誰もが知っていると思います。リクエストが分散される場合、セッションは処理方法を考慮する必要があります。従来、PHP セッションはローカル マシンの一時ファイルに保存されますが、この場合、セッションは分散後に失われます。 memcache を使用してホストし、memcache サーバーとして別のサーバーをセットアップします (メモリは大きいほうが良いです)。次の作業は PHP コードで行うことができます。ここでは php.ini を変更したくありません。いちいち変更するのは面倒だし、私は怠け者なので
php.iniのセッションの保存場所を直接変更することで、セッションの保存場所をmemcacheに書き込むことができると言ったのがわかると思います。はい、そのとおりですが、このメソッドでは期限切れのセッションを解放するために gc を呼び出すことはできません。今日話したいのは、He がホストしているため、セッションを自動的に解放できるようにすることだけではありません。コメントを自分で読む方法がわからない場合は、以下が私のコードです:
$_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();
PHPは関数パラメータを動的に取得するメソッドを実装します
PHPはファイルMIMEタイプツールの例を実装しますclass_phptips
以上がPHPは負荷分散下でのセッション共有機能を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。