PHPは負荷分散下でのセッション共有機能を実装します

不言
リリース: 2023-03-24 08:22:02
オリジナル
1426 人が閲覧しました

この記事では、負荷分散を実現するための 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 は単純な Redis ドキュメント ロックを実装し、同時の繰り返し呼び出しを防ぎます


PHPは関数パラメータを動的に取得するメソッドを実装します

PHPはファイルMIMEタイプツールの例を実装しますclass_phptips

以上がPHPは負荷分散下でのセッション共有機能を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート