ホームページ バックエンド開発 PHPチュートリアル Memcache_PHP チュートリアルでのセッション データのマルチサーバー共有の詳細な説明

Memcache_PHP チュートリアルでのセッション データのマルチサーバー共有の詳細な説明

Jul 21, 2016 pm 03:07 PM
memcache session 1つ 導入 共有 データ サーバ 深く行く 関連している 詳しい説明

関連する紹介
1. memcache + memcache のマルチサーバー データ共有の概要については、http://www.guigui8.com/index.php/archives/206.html

2.session を参照してください。メカニズム:
セッション メカニズムはサーバー側のメカニズムであり、サーバーは情報を保存するためにハッシュ テーブルに似た構造を使用します (またはハッシュ テーブルを使用する場合もあります)。
プログラムがクライアントのリクエストに対してセッションを作成する必要がある場合、サーバーはまずクライアントのリクエストに sessionid と呼ばれるセッション識別子が既に含まれているかどうかを確認します。セッション ID が既に含まれている場合は、そのリクエストが以前にこのクライアント用に作成されたことを意味します。セッションを渡した後、サーバーはセッション ID に従ってセッションを取得し、それを使用します (取得できない場合は、新しいセッションを作成する可能性があります)。クライアントのリクエストにセッション ID が含まれていない場合は、クライアント用にセッションが作成されます。セッションはセッション ID に関連付けられて生成されます。セッション ID の値は、繰り返されず、模倣するパターンが簡単に見つからない文字列である必要があります。このセッション ID は、この応答で保存するためにクライアントに返されます。

Cookie を使用してこのセッション ID を保存すると、対話プロセス中にブラウザーがルールに従ってこの ID をサーバーに自動的に表示できるようになります。

通常、この Cookie の名前は SEEESIONID に似ています。たとえば、WebLogic によって生成された Cookie PHPSESSID=ByOK3vjFD75aPnrF3K2HmdnV6QZcEbzWoWiBYEnLerj の場合、その名前は PHPSESSID です。

2 番目の動機
実際の Web 制作環境では、アプリケーション システムがさまざまなビジネス アプリケーションをさまざまなサーバーに分散して処理することがよくあります。
現在のオンライン ユーザー情報を追跡する場合、それが同じプライマリ ドメイン名であれば、グローバル Cookie を使用して関連データの共有を処理できます。それが異なるプライマリ ドメインにある場合は、中心的な概念を通じて対応する問題を解決できます。オブザーバー モード この概念によって拡張されたソリューションは数多くありますが、今日説明するのは前者で、memcache のマルチサーバー データ共有テクノロジを使用してセッションをシミュレートし、現在のオンライン ユーザー データを複数のサーバーで共有します。

複数サーバーのセッション情報の統合については、以下の要件があります:
1. memcached で指定された複数のサーバーにセッション情報を保存できること (先ほど紹介した memcache のマルチサーバー データ共有を通じて)。 2. zend に似せることができるようにする session_start() を定義する前に、session_id($sessid) を通じて session_id の値をカスタマイズします。
3. システムの実行中に、memcached に保存されたセッション情報とファイルに保存されたセッション情報を簡単に切り替えることができます。

3つのコード
実装方法は非常に簡単で、memcacheを使用してセッションメカニズムをシミュレートし、複数間でセッション情報を共有するという目的を達成するために記憶媒体を共有サーバーのメモリに置き換えるだけです。分散展開サーバー。呼び出しインターフェースはzendが提供するセッション操作機能とは異なるため、memcacheとファイルのセッション情報操作を簡単に切り替えることができます。
次のコードは何度もテストされており、上記の機能要件を満たすことができます。まずは以下に投稿します:


コードをコピーします コードは次のとおりです:

/**
*=---------------------------------------------- --- ----------------------------=
* ---------------------------------- ------------------------=
*
* Memcache ストレージに基づいてセッション機能を実装します
* (セッションメカニズムをシミュレートします。memcache を使用してストレージメディアを共有サーバーのメモリに置き換えるだけです)
*
* 欠点: 現在、セッションを導入するための実装戦略がありません。異なるプライマリドメインの共有メカニズム。つまり、同じメイン ドメイン内の実装のみがサポートされます。
*
* Copyright(c) 2008 by guigui.All Rights Reserved.
* @author guigui
* @version $Id: MemcacheSession.class.php、v 1.0 2008/12/22 $
* @パッケージシステム
* @link http://www.guigui8.com
*/


/**
* class MemcacheSession
*
* 1. セッションIDを保存するようにクライアントのCookieを設定します
* 2. ユーザーのデータをサーバー側に保存し、Cookie内のセッションIDを通じてデータがユーザーに属するかどうかを判断します
*/
class MemcacheSession
{
// {{{ クラスメンバー属性定義
public $memObject = null //memcache 操作オブジェクトハンドル
private $_sessId = '';
private $_sessKeyPrefix = 'sess_';
private $_sessExpireTime = 86400;
private $_cookieDomain = '.guigui8.com' //グローバル Cookie ドメイン名
= '_PROJECT_MEMCACHE_SESS';
private $ _cookieExpireTime = '';

private $_memServers = array('192.168.0.3' => 11211, '192.168.0.4' => 11211);
private $_sessContainer = array(); //現在のユーザーのセッション情報
private static $_instance = null; //このクラスのシングルトンオブジェクト
// }}}


/**
* シングルトンオブジェクトを取得する静的メソッド。
* (ちなみに、memcache 情報ストレージのサーバー パラメーターを指定できます)
*
* @param string $host - memcache データ ストレージのサーバー IP
* @param integer $port - memcache データ ストレージのサーバー ポート番号
* @param bool $ isInit - オブジェクトのインスタンス化時にセッションを開始するかどうか
*/
public static function getInstance($host='', $port=11211, $isInit = true) {
if (null ===) self::$_instance) {
'', $port=11211, $isInit = false){
!empty($host) && $this->_memServers = array(trim($host) => $port );
$isInit && $this- >start();
}

/**
* コンストラクター
* *
* @param bool $isInit - オブジェクトのインスタンス化時にセッションを開始するかどうか
*/

/**
*=-------------------------------------------- ------------------------=
*=---------------------- --------------------------------------------------=
* パブリックメソッド
*=------------------------------------------ ------------------------=
*=-------------- -------------------------------------------------- ---=
  */
public function start($expireTime = 0){
$ _sessId = $_COOKIE[$this-> ;_cookieName];
if (!$_sessId){
$this->_sessId = $this->_getId();
$this->_cookieExpireTime = ($expireTime > ; 0) ? time() + $expireTime : 0;
setcookie($this->_cookieName, $this->_sessId, $this->_cookieExpireTime, "/", $this->_cookieDomain);
$this->_initMemcacheObj();

$this-> $this->_sessContainer = $this-> ;_getSession($_sessId);
essId){
return false }

/**
* セッション操作を開始します
**/
public function isRegistered($varName){
if (!isset($this->_sessContainer[$varName])){
return false;
return true;
}   

/**
* * セッション変数を登録します
* *
* @param string $varName - セッションとして登録する必要がある変数名
* @parammixed $varValue - 登録する必要があるセッション変数の値
* @ return bool - 変数名はすでに存在します。 false を返します。登録は成功し、true を返します
*/
public function set($varName, $varValue){
$this->_sessContainer[$varName] = $varValue;
$this->_saveSession();
return true ;
}

/**
* 登録されたセッション変数の値を取得します
**/
public function get($varName){
if (!isset($this->_sessContainer[$varName])){
return false;
}
return $ this->_sessContainer[$varName];
}

/**
* 登録されたセッション変数を破棄します
*
* @param string $varName - 破棄する必要があるセッション変数の名前
* @return bool 破棄が成功した場合は true を返します
*/
public function delete($varName){
unset($this->_sessContainer[$varName]);
$this- >_saveSession();
return true;
}

/**
* 登録されているすべてのセッション変数を破棄します
*
* 破棄が成功した場合は @return true
*/
public function destroy(){
$this->_sessContainer = array();
$this->_saveSession() ;
true を返します。   
}


/**
* すべてのセッション変数を取得します
*
* @return array - 登録されているすべてのセッション変数値を返します
*/
public function getAll(){
return $this->_sessContainer;
}

/**
* 現在のセッション ID を取得します
*
* @return string セッション ID を取得します
*/
public function getSid(){
return $this->_sessId;
}

/**
* Memcache サーバー情報の取得
*
* @return array Memcache 構成配列情報
*/
public function getMemServers(){
return $this->_memServers;
}

/**
* Memcache サーバー情報を設定します
*
* @param string $host - Memcache サーバーの IP
* @param int $port - Memcache サーバーのポート
*/
public function setMemServers($arr){
$this->_memServers = $arr;
}

/**
* Memcache サーバーを追加します
*
* @param string $host - Memcache サーバーの IP
* @param int $port - Memcache サーバーのポート
*/
public function addMemServer($host, $port){
$this->_memServers[trim ($host)] = trim($port);
$this->memObject->addServer($host, $port);
}

/**
* Memcache サーバーを削除します (これは構成を削除するだけであり、実際に Memcached 接続プールから削除することはできないことに注意してください)
*
* @param string $host - Memcache サーバーの IP
* @param int $port - Memcache サーバーのポート
*/
public function RemoveMemServer($host) ){
unset($this->_memServers[trim($host)]);
}  

/**
*=-------------------------------------------- ------------------------=
*=---------------------- --------------------------------------------------=
* プライベートメソッド
*=------------------------------------------ ------------------------=
*=-------------- -------------------------------------------------- ---=
  */

/**
* セッション ID を生成します
*
* @return string 32 ビットのセッション ID を返します
*/
private function _getId(){
return md5(uniqid(microtime()));
}

/**
* Memcache に保存されているセッションキーを取得します
*
* @param string $_sessId - セッション ID を指定するかどうか
* @return string 取得したセッションキー
* /
プライベート関数 _getSessKey($_sessId = ''){
$sessKey = ($_sessId == '') ? $this->_sessKeyPrefix.$this->_sessId : $this->_sessKeyPrefix.$_sessId;
return $sessKey;
}
/**
* セッションデータを保存するパスが存在するか確認します
*
* @return bool 成功した場合は true を返します
*/
プライベート関数 _initMemcacheObj(){
もし( !class_exists('Memcache') || !function_exists('memcache_connect')){
$this->showMessage('失敗: Memcache 拡張機能がインストールされません。http://pecl.php.net からダウンロードしてインストールしてください') ;
}
if ($this->memObject && is_object($this->memObject)){
return true;
}
$this->memObject = 新しい Memcache;
if (!empty($this- >_memServers)) {
foreach ($this->_memServers as $_host => $_port) {
$this->memObject->addServer($_host, $_port);
}
}

return true;
}

/**
* セッションファイル内のデータを取得します
**/
private function _getSession($_sessId = ''){
$this->_initMemcacheObj();
$sessKey = $this->_getSessKey($_sessId );
$sessData = $this->memObject->get($sessKey);
if (!is_array($sessData) || empty($sessData)){
//これは $_COOKIE['__SessHandler である必要があります'] エラー!
return array();
}
return $sessData;
}

/**
* 現在のセッション データを Memcache に保存します
*
* @param string $_sessId - セッション ID
* @return 成功した場合は true を返します
*/
private function _saveSession($_sessId = ''){
$this->_in itMemcacheObj() ;
$sessKey = $this->gt;_getSessKey($_sessId);

if (empty($this->gt;_sessContainer)){
$ret = @$this->memObject->set($sessKey, $this->_sessContainer, false, $this->_sessExpireTime);
}else{
$ret = @$this->memObject->replace($sessKey, $this->_sessContainer, false, $ this->_sessExpireTime);
}If (! $ RET) {
$ this- & gt; _Showmessage ('失敗: セッション データの保存に失敗しました。memcache サーバーを確認してください') *
* プロンプトメッセージを表示します
*
* @param string $strMessage – 表示されるメッセージの内容
* @param bool $isFailed – 失敗メッセージかどうか、デフォルトは true です
*/
private function _showMessage($strMessage, $isFailed = true); {
return;
if ($isFailed){
echo ($strMessage);
}
echo $strMessage;
}




4 つのアプリ


1. ローカル セッション ストレージは元のセッションと同じです。何も変更せずに動作します。
例:
コードをコピーします
コードは次のとおりです:
session_start();$_SESSION['file_session_info']= 'ローカル ファイルに保存されたセッション情報' // ローカルに保存されたセッションファイル2. Memcache共有サーバーのセッションストレージ
コピーコード

コードは次のとおりです。 mem->addMemServer('192.1 68 .0.4',11211);
$mem->addMemServer('192.168.0.5',11211);
//Cookie 関数が使用できない場合は、マッピングを session_id ベースに設定します他のパラメータによって渡される固有の情報について
if(1 ) {$sn= '838ece1033bf7c7468e873e79ba2a3ec';
$mem->setSessId($sn);
}
$mem->set('name','guigui '); //複数の memcache サーバーで共有されるセッション $mem->set('addr','wuhan') //複数の memcache サーバーで共有されるセッション //$mem->destroy();
3. ローカルストレージとmemcacheストレージをそれぞれ取得します




コードをコピーします

コードは次のとおりです:


$addr= $mem->get('addr');
$_MEM_SESSION= $mem->getAll();
echo"
localhost ファイル セッション:";
var_dump($_SESSION);
echo"
memcache セッション:";var_dump($_MEM_SESSION);
/ /$res= $mem->delete('name');
http://www.bkjia.com/PHPjc/327560.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/327560.html

技術記事

関連する概要 1. memcache + memcache のマルチサーバー データ共有の概要については、http://www.guigui8.com/index.php/archives/206.html を参照してください。 2. セッション メカニズム: セッション メカニズムはサービス..

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

オープンソース!ゾーイデプスを超えて! DepthFM: 高速かつ正確な単眼深度推定! オープンソース!ゾーイデプスを超えて! DepthFM: 高速かつ正確な単眼深度推定! Apr 03, 2024 pm 12:04 PM

0.この記事は何をするのですか?私たちは、多用途かつ高速な最先端の生成単眼深度推定モデルである DepthFM を提案します。従来の深度推定タスクに加えて、DepthFM は深度修復などの下流タスクでも最先端の機能を実証します。 DepthFM は効率的で、いくつかの推論ステップ内で深度マップを合成できます。この作品について一緒に読みましょう〜 1. 論文情報タイトル: DepthFM: FastMonocularDepthEstimationwithFlowMatching 著者: MingGui、JohannesS.Fischer、UlrichPrestel、PingchuanMa、Dmytr

Google は大喜び: JAX のパフォーマンスが Pytorch や TensorFlow を上回りました! GPU 推論トレーニングの最速の選択肢となる可能性があります Google は大喜び: JAX のパフォーマンスが Pytorch や TensorFlow を上回りました! GPU 推論トレーニングの最速の選択肢となる可能性があります Apr 01, 2024 pm 07:46 PM

Google が推進する JAX のパフォーマンスは、最近のベンチマーク テストで Pytorch や TensorFlow のパフォーマンスを上回り、7 つの指標で 1 位にランクされました。また、テストは最高の JAX パフォーマンスを備えた TPU では行われませんでした。ただし、開発者の間では、依然として Tensorflow よりも Pytorch の方が人気があります。しかし、将来的には、おそらくより大規模なモデルが JAX プラットフォームに基づいてトレーニングされ、実行されるようになるでしょう。モデル 最近、Keras チームは、ネイティブ PyTorch 実装を使用して 3 つのバックエンド (TensorFlow、JAX、PyTorch) をベンチマークし、TensorFlow を使用して Keras2 をベンチマークしました。まず、主流のセットを選択します

iPhoneのセルラーデータインターネット速度が遅い:修正 iPhoneのセルラーデータインターネット速度が遅い:修正 May 03, 2024 pm 09:01 PM

iPhone のモバイル データ接続に遅延や遅い問題が発生していませんか?通常、携帯電話の携帯インターネットの強度は、地域、携帯ネットワークの種類、ローミングの種類などのいくつかの要因によって異なります。より高速で信頼性の高いセルラー インターネット接続を実現するためにできることがいくつかあります。解決策 1 – iPhone を強制的に再起動する 場合によっては、デバイスを強制的に再起動すると、携帯電話接続を含む多くの機能がリセットされるだけです。ステップ 1 – 音量を上げるキーを 1 回押して放します。次に、音量小キーを押して、もう一度放します。ステップ 2 – プロセスの次の部分は、右側のボタンを押し続けることです。 iPhone の再起動が完了するまで待ちます。セルラーデータを有効にし、ネットワーク速度を確認します。もう一度確認してください 修正 2 – データ モードを変更する 5G はより優れたネットワーク速度を提供しますが、信号が弱い場合はより適切に機能します

Dnsmasq を DHCP リレー サーバーとして構成する方法 Dnsmasq を DHCP リレー サーバーとして構成する方法 Mar 21, 2024 am 08:50 AM

DHCP リレーの役割は、2 つのサーバーが異なるサブネット上にある場合でも、受信した DHCP パケットをネットワーク上の別の DHCP サーバーに転送することです。 DHCP リレーを使用すると、ネットワーク センターに集中 DHCP サーバーを展開し、それを使用してすべてのネットワーク サブネット/VLAN に IP アドレスを動的に割り当てることができます。 Dnsmasq は、一般的に使用される DNS および DHCP プロトコル サーバーであり、ネットワーク内の動的ホスト構成の管理を支援する DHCP リレー サーバーとして構成できます。この記事では、dnsmasq を DHCP リレー サーバーとして構成する方法を説明します。コンテンツ トピック: ネットワーク トポロジ DHCP リレー上の静的 IP アドレスの構成 集中型 DHCP サーバー上の DHCP リレー D

超知性の生命力が覚醒する!しかし、自己更新 AI の登場により、母親はデータのボトルネックを心配する必要がなくなりました。 超知性の生命力が覚醒する!しかし、自己更新 AI の登場により、母親はデータのボトルネックを心配する必要がなくなりました。 Apr 29, 2024 pm 06:55 PM

世界は狂ったように大きなモデルを構築していますが、インターネット上のデータだけではまったく不十分です。このトレーニング モデルは「ハンガー ゲーム」のようであり、世界中の AI 研究者は、データを貪欲に食べる人たちにどのように餌を与えるかを心配しています。この問題は、マルチモーダル タスクで特に顕著です。何もできなかった当時、中国人民大学学部のスタートアップチームは、独自の新しいモデルを使用して、中国で初めて「モデル生成データフィード自体」を実現しました。さらに、これは理解側と生成側の 2 つの側面からのアプローチであり、両方の側で高品質のマルチモーダルな新しいデータを生成し、モデル自体にデータのフィードバックを提供できます。モデルとは何ですか? Awaker 1.0 は、中関村フォーラムに登場したばかりの大型マルチモーダル モデルです。チームは誰ですか?ソフォンエンジン。人民大学ヒルハウス人工知能大学院の博士課程学生、ガオ・イージャオ氏によって設立されました。

アメリカ空軍が初のAI戦闘機を公開し注目を集める!大臣はプロセス全体を通じて干渉することなく個人的にテストを実施し、10万行のコードが21回にわたってテストされました。 アメリカ空軍が初のAI戦闘機を公開し注目を集める!大臣はプロセス全体を通じて干渉することなく個人的にテストを実施し、10万行のコードが21回にわたってテストされました。 May 07, 2024 pm 05:00 PM

最近、軍事界は、米軍戦闘機が AI を使用して完全自動空戦を完了できるようになったというニュースに圧倒されました。そう、つい最近、米軍のAI戦闘機が初めて公開され、その謎が明らかになりました。この戦闘機の正式名称は可変安定性飛行シミュレーター試験機(VISTA)で、アメリカ空軍長官が自ら飛行させ、一対一の空戦をシミュレートした。 5 月 2 日、フランク ケンダル米国空軍長官は X-62AVISTA でエドワーズ空軍基地を離陸しました。1 時間の飛行中、すべての飛行動作が AI によって自律的に完了されたことに注目してください。ケンダル氏は「過去数十年にわたり、私たちは自律型空対空戦闘の無限の可能性について考えてきたが、それは常に手の届かないものだと思われてきた」と語った。しかし今では、

テスラのロボットは工場で働く、マスク氏:手の自由度は今年22に達する! テスラのロボットは工場で働く、マスク氏:手の自由度は今年22に達する! May 06, 2024 pm 04:13 PM

テスラのロボット「オプティマス」の最新映像が公開され、すでに工場内で稼働可能となっている。通常の速度では、バッテリー(テスラの4680バッテリー)を次のように分類します:公式は、20倍の速度でどのように見えるかも公開しました - 小さな「ワークステーション」上で、ピッキング、ピッキング、ピッキング:今回は、それがリリースされたハイライトの1つビデオの内容は、オプティマスが工場内でこの作業を完全に自律的に行​​い、プロセス全体を通じて人間の介入なしに完了するというものです。そして、オプティマスの観点から見ると、自動エラー修正に重点を置いて、曲がったバッテリーを拾い上げたり配置したりすることもできます。オプティマスのハンドについては、NVIDIA の科学者ジム ファン氏が高く評価しました。オプティマスのハンドは、世界の 5 本指ロボットの 1 つです。最も器用。その手は触覚だけではありません

Alibaba 7B マルチモーダル文書理解の大規模モデルが新しい SOTA を獲得 Alibaba 7B マルチモーダル文書理解の大規模モデルが新しい SOTA を獲得 Apr 02, 2024 am 11:31 AM

マルチモーダル文書理解機能のための新しい SOTA!アリババの mPLUG チームは、最新のオープンソース作品 mPLUG-DocOwl1.5 をリリースしました。これは、高解像度の画像テキスト認識、一般的な文書構造の理解、指示の遵守、外部知識の導入という 4 つの主要な課題に対処するための一連のソリューションを提案しています。さっそく、その効果を見てみましょう。複雑な構造のグラフをワンクリックで認識しMarkdown形式に変換:さまざまなスタイルのグラフが利用可能:より詳細な文字認識や位置決めも簡単に対応:文書理解の詳しい説明も可能:ご存知「文書理解」 「」は現在、大規模な言語モデルの実装にとって重要なシナリオです。市場には文書の読み取りを支援する多くの製品が存在します。その中には、主にテキスト認識に OCR システムを使用し、テキスト処理に LLM と連携する製品もあります。

See all articles