memcache の概要

巴扎黑
リリース: 2023-03-14 10:24:01
オリジナル
1600 人が閲覧しました

memcached は、高性能の分散メモリ キャッシュ サーバーです。海外コミュニティサイト「LIVEJOURNAL」の開発チームが開発。

使用目的:

データベースクエリ結果をキャッシュすることでデータベースアクセス数を減らし、動的Webアプリケーションの速度とスケーラビリティを向上させます。

memcache は、無料のオープンソース、高性能、分散メモリ オブジェクト キャッシング システムです。動的な Web アプリケーションを高速化し、データベースの負荷を軽減するために使用されます。

memcahceの特徴

1. C/Sアーキテクチャに基づく、シンプルなプロトコル

2. libeventイベント処理に基づく{libeventは、Windows、Linux、bsd(派生版)に適したイベントトリガーに基づくネットワークライブラリです。 Unix システム) およびその他のプラットフォーム}

3. 組み込みメモリ保存方法

4. クライアントベースの memcached 分散が必要です

1. タスクに 10 個のサブシステムがある場合- タスク、これら 10 個のサブタスクを 10 台のサーバーに別々に配置すると、タスクの実行時間が大幅に短縮されます。)

2. 同じデータに頻繁にアクセスする必要がある場合

3. データ共有が必要な場合

C/S アーキテクチャの概要

インストールの起動(PDFドキュメントを参照)

各種コマンドの使用

set/add/replace/delete/get/gets/cas/stats/stats items/append/prepend/flush_allなど

memcahced some機能と制限事項

①メモリが十分にある限り、Memcached に保存できるアイテムデータの量に制限はありません

②単一の Memcached プロセスで使用される最大メモリは 2G です。より多くのメモリを使用するには、次のことができます。複数のポートで複数の Memcached プロセスを開きます

③ データの最大有効期限は 30 日です。永続的に設定すると、この時点で有効期限も切れます。定数 REALTIME_MAXDELTA

④60*60*24*30 は、キーの最大長を制御します。

⑤ この長さより大きい場合は格納できません

⑥ 1項目の最大データは1MBを超えるデータは格納されません。定数 POWER_BLOCK 1048576。

⑦デフォルトのスラブサイズです

⑧conn_init()による最大同時接続数は200です。freetotalによって制御され、ソフト接続の最大数は1024です。

⑨settings.maxconns=1024によって制御されます。 ⑩パラメータスペース占有に関連する: settings.factor=1.25、settings.chunk_size=48、スラブのデータ占有とステップ方法に影響します

PHP の Memcache クライアントのすべてのメソッドの概要

memcache 関数のすべてのメソッドのリストは次のとおりです:
Memcache::add - 値を追加します。すでに存在する場合は false を返します
Memcache::addServer - 使用するサーバー アドレスを追加します
Memcache::close - Memcache オブジェクトを閉じます
Memcache::connect - Memcache オブジェクトを作成します
memcache_debug - デバッグ関数を制御します
Memcache::decrement - 保存されたキーの値を減算します
Memcache::delete - キー値を削除します
Memcache::flush - キャッシュされたデータをすべてクリアします
Memcache::get -キー値を取得します
Memcache::getExtendedStats - プロセスプール内のすべてのプロセスの実行中のシステム統計を取得します
Memcache::getServerStatus - 実行中のサーバーのパラメータを取得します
Memcache::getStats - サーバーの実行中の統計をいくつか返します
Memcache ::getVersion - 実行中の Memcache のバージョン情報を返します
Memcache::increment - 保存されたキーに値を追加します
Memcache::pconnect - Memcache 永続接続オブジェクトを作成します
Memcache::replace - 既存のキーを上書きします
Memcache: :set - 値を追加します(すでに存在する場合は上書きします)
Memcache::setCompressThreshold – 特定のサイズより大きいデータを圧縮します
Memcache::setServerParams – 実行時にサーバーパラメータを変更します

PHP の Memcache 操作メソッドの分解


Memcache::add の使用法

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

bool Memcache::add ( string $key ,mixed $var [, int $flag [, int $expire ]] )

注:
$key が存在しない場合は、この関数を使用して $var の値を保存します。機能的に同等の関数は memcache_add() です。

パラメータ:
$key: 保存されるキーの値。
$var: 保存された値、文字型、整数型は元の値として保存され、他の型は後で自動的にシリアル化されて保存されます。
$flag: MEMCACHE_COMPRESSED を使用して格納された値を圧縮するかどうか。true は圧縮を意味し、false は圧縮なしを意味します。
$expire: 保存された値の有効期限。0 の場合は、UNIX タイムスタンプまたは説明を使用して今後の時間を表すことができますが、秒を使用して表す必要があります。 2592000 秒 (30 日を意味します) を超えてはなりません。

戻り値:
成功した場合はTRUE、失敗した場合はFALSE。 $key 値がすでに存在する場合は、FALSE が返されます。 その他の場合、Memcache::add() の使用法は Memcache::set() と同様です。
例:



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


$memcache_obj = memcache_connect("localhost", 11211);
memcache_add($memcache_obj, 'var_key', 'テスト変数', false, 30);
$memcache_obj->add('var_key') , 'テスト変数', false, 30);
?>




Memcache::addServerの使用法

コードは次のとおりです:
bool Memcache::addServer ( string $host [, int $port [ , bool $persistent [, int $weight [, int$timeout [, int $retry_interval [, bool $status [, callback $failure_callback ]]]]]] )


手順:
使用可能なサーバー アドレスが接続プールに追加され、接続は Memcache::addServer で開かれます。スクリプトの実行後に自動的に閉じられます。または、Memcache::close() で手動で閉じることもできます。同じ関数は memcache_add_server() です。
このメソッドを使用する場合 (Memcache::connect() および Memcache::pconnect() メソッドと比較して)、ネットワーク接続は必要な場合にのみ確立されるため、接続プール システムに多くのサーバーを追加することによってネットワーク接続が増加することはありません。多くのサーバーが使用されていない可能性があるため、負担がかかります。
他のサーバーが正常である限り、このメソッドの実行のどの段階でも障害回復が発生します。ユーザーはこれらの接続リクエストの障害に気づきません。あらゆる種類のソケットまたは memcached サーバーレベルのエラーがフェイルオーバーを引き起こす可能性があります。既存のキーの追加などの通常のクライアント エラーでは、フェールオーバーはトリガーされません。

パラメータ:
$host サーバーアドレス
$port サーバーポート
$persistent が永続接続かどうか
$weight すべてのサーバーの中のこのサーバーの重み
$timeout 接続の継続時間
$retry_interval 接続の再試行間隔デフォルトは 15、-1 に設定すると再試行なしを意味します
$status はサーバーのオンライン ステータスを制御します
$failure_callback を使用すると、エラー メッセージを処理するためのフォールバック関数を設定できます。

戻り値:
成功した場合はTRUE、失敗した場合はFALSE。

例:

コードは次のとおりです:
$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211); ', 1121 1 );

$memcache_connect('memcache_host', 11211);
memcache_add_server($memcache_obj, 'memcache_host2', 11211); mcache:: 閉じる (無効)

説明:
memcache サーバー接続を閉じます。この関数は、長い接続を閉じません。長い接続は、Web サーバーがシャットダウンまたは再起動されたときにのみ閉じられます。同じ関数 memcache_close()
戻り値:

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
例:

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


$memcache_connect('memcache_host', 11211);
$memcache_obj = newメムキャッシュ ;$memcache_obj -> connect('memcache_host', 11211);
$memcache_obj->close();>


Memcache::connect の使用法


コードは次のとおりです:痛い::connect ( string $ host [, int $port [, int $timeout ]] )



手順:
memcached サーバー接続を開き、memcached サーバーへの接続を確立します。 Memcache::connect で開かれた接続は次のようになります。スクリプトの実行後に自動的に閉じられます。 Memcache::close() を使用して接続を閉じることもできます。同じ関数は memcache_connect() です。
パラメータ:

$host: memcached がリッスンしているリンクのホストを指します。このパラメータには、unix ドメイン名ソケットを使用する別の特別な接続メソッドがあります。 case
$port: memcached がリッスンしているリンクを指すポート。UNIX ドメイン名ソケットの場合、ポートは 0 に設定する必要があります。
$timeout: デーモンへの接続にかかる秒数。デフォルト値の 1 秒を使用する場合は、接続が遅すぎるとキャッシュの利点が失われる可能性があることを考慮する必要があります。
戻り値:
成功した場合はTRUE、失敗した場合はFALSE。

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


$memcache_obj = memcache_connect('memcache_host', 11211);
$memcache->connect('memcache_host; ' , 11 211) ;

?>




memcache::debug

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

bool memcache_debug ( bool $on_off )



説明:
php のコンパイル時に -enable-debug オプションが使用されている場合に限り、デバッグ関数を制御します。それ以外の場合、この関数は何の効果もありません。
パラメータ:
$on_off: true はデバッグをオンにすることを意味し、false はデバッグをオフにすることを意味します
戻り値:
コンパイル時に php が -enable-debug オプションを使用する場合は true を返し、それ以外の場合は false を返します

Memcache::decrement の使用法

コードは次のとおりです:
int Memcache::decrement ( string $key [, int $value ] )



説明:
Memcache::decremen メソッドは、保存されたキーの値をデクリメントします。操作、使用法は Memcache::increment と似ています。
memcache_decrement() 関数を使用することもできます。
パラメータ:
Key: 削減したいキーの名前
Value: 削減したい値。

戻り値:
成功した場合は減算された値を返し、失敗した場合は false を返します。
例:

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

$memcache = new Memcache;
$memcache->connect('localhost', 11211); 'test_item' , 8);
$memcache->increment('test_item', 4);
echo $memcache->decrement('test_item', 7);
?>

この例では、Memcache::increment 関数も一緒にデモします。


Memcache::delete の使用法


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

bool Memcache::delete ( string $key [, int $timeout ] )

手順:
次の場合はキー値を削除しますパラメータ $timeout が設定されている場合、保存された値は設定された秒数後に期限切れになります。関数 memcache_delete() を使用することもできます。

戻り値:
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

例:

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


$memcache_obj = memcache_connect('memcache_host', 11211);

memcache_delete($memcache_obj, 'key_to_delete') 、10); memcache_obj = 新しい Memcache;
$memcache_obj->connect('memcache_host', 11211);
$memcache_obj->delete('key_to_delete', 10);
Memcache::flush



コードは次のとおりです:
bool Memcache::flush (void)



説明:
キャッシュされたデータをすべてクリアします。 Memcache::flush は実際にはリソースを解放しません。占有されているメモリ領域を新しいキャッシュでカバーできるように、すべてのキャッシュを期限切れとしてマークするだけです。同じ関数は memcache_flush() です。

戻り値:
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
例:



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



$memcache_obj = memcache_connect('memcache_host', 11211);

memcache_flush($memcache_obj);

$memcache_obj = 新しい Memcache ;
$ memcache_obj->connect('memcache_host', 11211);
$memcache_obj->flush();




Memcache::get


コードは次のとおりです以下に続きます:


string Memcache::get ( string $key [, int &$flags ] )
array Memcache::get ( array $keys [, array &$flags ] )



説明: の関数 メソッドはキー値を取得するもので、キー値は配列にすることができ、結果にはキーと値のペアが含まれます。

パラメータ:

$key はキー値またはキーの配列値です。
$flags このパラメータが存在する場合、$flags はこのパラメータに書き込まれる値に関連します。これらの $flags は Memcache::set() 関数の $flags に似ています。
戻り値:
成功した場合はキーに対応する値を返し、失敗した場合はfalseを返します。
例:


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



$memcache_obj = memcache_connect( 'memcache_host', 11211);
$var = memcache_get($memcache_obj, 'some_key');
$memcache_obj->connect('memcache_host', 11211); memcache_obj ->get ('some_key');

$memcache_obj = memcache_connect('memcache_host', 11211);
$var = memcache_get($memcache_obj, Array('some_key', 'another_key'));新しい Memcache;
$memcache_obj->connect('memcache_host', 11211);
$var = $memcache_obj->get(Array('some_key', 'first_key')?>


Memcache::getExtendedStats




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

array Memcache::getExtendedStats ([ string $type [, int $slabid [, int $limit ]]] )



説明:
プロセスプール内のすべてのプロセスの実行中のシステム統計を取得します。同じ関数は memcache_get_extended_stats() です。

パラメータ:
$type は、要求された戻り値のタイプを示します。reset、malloc、maps、cachedump、slabs、items、sizes;
$slabid は、最初のパラメータが「cachedump」に設定されている場合に使用されます。
$limit の最初のパラメータが "cachedump" に設定されている場合に使用されます。
戻り値:
成功した場合は統計が返されます。失敗した場合は false が返されます。

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

$memcache_obj = new Memcache; ->addServer('memcache_host' , 11211);
$memcache_obj->addServer('failed_host', 11211);

$stats = $memcache_obj->getExtendedStats();
//メモリ
$statsslab = $memcache_obj- >getExtendedStats(slabs);>




Memcache::getServerStatus




コードは次のとおりです。 Memcache::getServerStatus (文字列$host [, int $port ] )

説明:
サーバーを実行するためのパラメータを取得します。サーバーのオンラインまたはオフラインのステータスを返します。同じ関数は memcache_get_server_status() です。
パラメータ:
$host: リスニング接続のホスト

$port リスニング接続のホストのポート、デフォルトは 11211 です

戻り値:
サーバーステータスを正常に返します。サーバーが起動していない場合は 0 が返されます。他の数値はサーバーが起動していることを示します。

例:

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


$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211);

echo $memcache->getServerStatus( 'memcache_host ' , 11211);
$memcache_connect('memcache_host', 11211);

?>




Memcache::getStats


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

array Memcache::getStats ([ string $type [, int $slabid [, int $limit ]]] )

説明:

サーバーの動作統計を返します。 。同じ関数は memcache_get_stats() です。
パラメータ:
$type は、要求された戻り値のタイプを示します。reset、malloc、maps、cachedump、slabs、items、sizes;
$slabid は、最初のパラメータが「cachedump」に設定されている場合に使用されます。

$limit の最初のパラメータが "cachedump" に設定されている場合に使用されます。


Memcache::getVersion




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

string Memcache::getVersion (void)

説明:

実行中の Memcache のバージョン情報を返します。同じ関数 memcache_get_version()
戻り値:
正常にサーバーのバージョン情報を返し、失敗した場合は false を返します。

例:

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


$memcache = new Memcache;
$memcache->connect('memcache_host', 11211);
echo $memcache->getVersion( );

$memcache = memcache_connect('memcache_host', 11211);
echo memcache_get_version($memcache)
?>




Memcache::increment


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


int Memcache::increment ( string $key [, int $value ] )


保存されたキーに値を追加します
使用方法のリファレンス Memcache::decrement

Memcache::pconnect




コードは次のとおりです以下のように:

bool Memcache::pconnect ( string $host [, int $port [, int $timeout ]] )

手順:
Memcache 永続接続オブジェクトを作成する

使用法は Memcache::connect( )、いくつかの違いがありますが、場所は Memcache::pconnect で、永続的な接続を確立します。この接続は、スクリプトの実行後、または Memcache::close() 関数の実行後に閉じられません。これと同じ関数は memcache_pconnect() です。
パラメータ:
$host: memcached がリッスンしているリンクのホストを指します。このパラメータには、別の特別な接続メソッド unix:///path/to/memcached.sock があります。つまり、unix ドメイン名ソケットを使用します。この場合、ポートは 0 に設定する必要があります。
$port: memcached がリッスンしているリンクのポートを指します。unix ドメイン名ソケットの場合は、そのポートです。 0 に設定する必要があります。

$timeout: デーモンに接続する秒数に使用します。デフォルト値の 1 秒を変更する場合は、接続が遅すぎると利点が失われる可能性があることを考慮する必要があります。キャッシング。

戻り値:
成功した場合はTRUE、失敗した場合はFALSE

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



$memcache_pconnect('memcache_host', 11211);

$memcache_obj = 新しい Memcache;
$memcache_obj->pconnect('memcache_host', 11211);

?>



Memcache::replace

コードは次のとおりです:
bool Memcache::replace ( string $key ,mixed $var [, int $flag [, int $expire ]] )



手順:
既存のキーを上書きします。同じ関数は memcache_replace() です。

パラメータ:
$key: 保存されるキーの値。
$var: 保存された値、文字型、整数型は元の値として保存され、他の型は後で自動的にシリアル化されて保存されます。
$flag: MEMCACHE_COMPRESSED を使用して格納された値を圧縮するかどうか。true は圧縮を意味し、false は圧縮なしを意味します。
$expire: 保存された値の有効期限。0 の場合は、UNIX タイムスタンプまたは説明を使用して時間を表すことができますが、秒を使用して表す必要があります。 2592000 秒 (30 日を意味します) を超えてはなりません。

戻り値:
成功した場合はTRUE、失敗した場合はFALSE。 $key 値がすでに存在する場合は、FALSE が返されます。

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


$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_replace($memcache_obj, "test_key", "some variable", false, 30) ;
$ memcache_obj->replace("test_key", "some variable", false, 30);



Memcache::set


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

bool Memcache::set ( string $key ,mixed $var [, int $flag [, int $expire ]] )
説明:

値を追加し、既に存在する場合は上書きします。同じ関数は memcache_set() です。

パラメータ:
$key: 保存されるキーの値。
$var: 保存された値、文字型、整数型は元の値として保存され、他の型は後で自動的にシリアル化されて保存されます。
$flag: MEMCACHE_COMPRESSED を使用して格納された値を圧縮するかどうか。true は圧縮を意味し、false は圧縮なしを意味します。
$expire: 保存された値の有効期限。0 の場合は、UNIX タイムスタンプまたは説明を使用して今後の時間を表すことができますが、秒を使用して表す必要があります。 2592000 秒 (30 日を意味します) を超えてはなりません。

戻り値:
成功した場合はTRUE、失敗した場合はFALSE。

例:



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

$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host', 11211);キー」、 ' 非常に大きな変数', MEMCACHE_COMPRESSED, 50);
echo $memcache_obj->get('var_key');



Memcache::setCompressThreshold



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

bool Memキャッシュ::setCom pressThreshold ( int $threshold [, float $min_ Savings ] )

説明:
特定のサイズを超えるデータを圧縮します。同じ関数は memcache_set_compress_threshold() です。


パラメータ:
setCompressThreshold メソッドには 2 つのパラメータがあります。最初のパラメータは処理データ サイズの臨界点を表し、2 番目のパラメータは圧縮率を表し、デフォルトは 0.2 です。

戻り値:
成功した場合はTRUE、失敗した場合はFALSE。

例:

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

$memcache_obj = new Memcache;
$memcache_obj->addServer('memcache_host', 11211); gt;setCom pressThreshold (20000, 0.2 );

$memcache_connect('memcache_host', 11211);

?>





Memcache::setServerParams



コードは次のとおりです:
bool Memcache::setServerParams ( string $host [, int $port [, int $timeout [, int$retry_interval [, bool $status [, callback $failure_callback ]]]]] )

説明:
サーバーパラメータを変更するときに実行されます。同じ関数は memcache_set_server_params() です。
パラメータ:

$hostサーバーアドレス
$portサーバーポート
$timeout接続時間
$retry_interval 接続再試行間隔、デフォルトは15、-1に設定すると再試行なしを意味します
$ステータス制御サーバー オンラインステータス
$failure_callbackは許可しますエラーメッセージを処理するコールバック関数を設定します。

戻り値:
成功した場合はTRUE、失敗した場合はFALSE。

例:

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



function _callback_memcache_failure($host, $port) {
print "memcache '$host:$port' が失敗しました"
}

$memcache = 新しい Memcache

// オフラインで 1 つ追加します。 mode Server
$memcache->addServer('memcache_host', 11211, false, 1, 1, -1, false);

// サーバーをオンラインに設定します
$memcache->setServerParams('memcache_host', 11211, 1, 15, true, '_callback_memcache_failure');

$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_set_server_params($memcache_obj, 'memcache_host', 11211, 1, 15, true, ' _コールバック _memcache_failure
;
?>



6. 包括的な使用例

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

//Connect
$mem = new Memcache; db.nowmagic. net", 12000);
//データを保存
$mem->set('key1', 'これが最初の値です', 0, 60);
$val = $mem->get( 'key1') ;
echo "key1 の値を取得: " . $val ."
";
//データを置換
$mem->replace('key1', 'これは値を置換します', 0, 60) ;
$val = $mem->get('key1');
echo "key1 の値を取得します: " . $val . "
"; arr = array(' aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60); get('key2' );
echo "key2 値を取得: ";
print_r($val2);
//データを削除
$mem->delete('key1') );
$val = $mem->get('key1');
echo "key1 の値を取得します: "
"; ;flush();
$val2 = $mem->get('key2');
print_r($val2);
/ /Close the connection
$ mem->close();
?>



正常であれば、ブラウザは次のように出力します:

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


Key1 の値を取得: これは最初の値です
key1 の値を取得: これは置換値です

key2 の値を取得: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
key1 の値を取得:
key2 の値を取得します:


7. サンプル プログラム コード分析


Memcache オブジェクトを初期化します: $mem = new Memcache;
最初のパラメーターはサーバーの IP アドレスです。 2 番目のパラメータは Memcache のオープン ポートです: $mem->connect("192.168.0.200", 12000);
最初のパラメータは Memcache サーバーのキーです。データ。2 番目のパラメータはデータのキーです。最初のパラメータは保存する必要があるデータの内容です。ここでは文字列、3 番目のパラメータはマークで、通常は 0 またはに設定されます。 MEMCACHE_COMPRESSED、4 番目のパラメータはデータの有効期間です。これは、データがこの期間内に有効であることを意味します。この期間が経過すると、データは Memcache サーバーによって消去されます。設定されている場合、単位は秒です。 0 にすると、永久に有効になります。ここでは 1 分間の有効時間である 60 を設定します。 $mem->set ('key1', 'This is first value', 0, 60); Memcache サーバーからのデータのパラメータは 1 つだけで、これがデータを取得するためのキーです。データの後にこの出力を取得します。




$val = $mem->get('key1');
echo "Get key1 value: " . $val;


次に、replace メソッドを使用して、上記の key1 の値を置き換えます。メソッドは set と同じですが、最初のパラメーター key1 はデータ内容を置き換えるキーである必要があります。最終的な出力は次のとおりです。

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

$mem-> ;replace('key1', 'これは replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val;

同様に、Memcache も配列を保存できます。以下は、Memcache に保存され、取得されて出力される配列です。

コードは次のとおりです。
$arr = array('aaa', 'bbb', 'ccc' , 'ddd'); ->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');

データを削除します。 delte インターフェイスを使用し、パラメーターがキーである場合、Memcache サーバー内のこのキーのデータを削除できます。最終的な出力には結果はありません:


コードは次のとおりです:
$mem->delete('key1');
$val = $mem->get('key1');
echo "key1 値を取得します: "
";



最後に、Memcache サーバーに保存されているすべてのデータをクリアすると、データがなくなっていることがわかります。最後に、key2 出力のデータが空になり、最後に接続が閉じられます。

コードは次のとおりです。
$mem->flush();
$val2 = $mem->get('key2');
echo "key2 値を取得します: "; br />";



Memcache を使用するタイミングと Memcache の使用環境

Memcache を使用する Web サイトは一般的に比較的大きなトラフィックを伴います。データベースへの負荷を軽減するために、Memcache はキャッシュ領域は、メモリおよびフロントエンドに情報の一部を保存し、高速にアクセスできます。結局のところ、単一の Memcache のメモリ容量には限界があります。ここでは私の個人的な意見を述べているだけであり、実践したわけではないので、参考としてのみ使用してください。


分散アプリケーション

Memcache は元々分散アプリケーションをサポートしていましたが、クライアントはより良いサポートを提供するために少し変更されました。たとえば、ユーザーベースの Web サイトの場合、各ユーザーはユーザー ID を持っているため、固定 ID に従って抽出してアクセスできます。たとえば、1 で始まるユーザーは に保存されます。最初の 1 つの Memcache サーバーでは、2 で始まるユーザーのデータが 2 番目の Memcache サーバーに保存され、まずユーザー ID に従ってアクセス データが変換され、アクセスされます。
ただし、これにはユーザー ID に基づいて判断する必要があるという欠点があります。ビジネスに一貫性がない場合、または他の種類のアプリケーションがあまり適切ではない場合は、実際のビジネスに基づいて検討するか、さらに別の方法を考えることができます。適切な方法。


データベースの負荷を軽減する

これは比較的重要です。基本的に、すべてのデータはデータベースに頻繁にアクセスされるため、データベースのパフォーマンスが大幅に低下し、同時により多くのユーザーにサービスを提供できなくなります。 MySQL など、テーブルが頻繁にロックされる場合は、Memcache にデータベースへの負荷を分散させます。変更が比較的小さく、フロントエンドへの大規模な変更を必要としない方法で、現在のアーキテクチャを変更する方法が必要です。
私が考えている簡単な方法:
バックエンドデータベース操作モジュールは、すべての選択操作(更新/削除/挿入に関係なく)を抽出し、対応するSQLに対して対応するハッシュアルゴリズムを実行して、ハッシュデータキーを計算します( MD5 または SHA)、Memcache でこのキーのデータを検索し、データが存在しない場合は、キャッシュに書き込まれていないことを意味し、データベースからデータを抽出します (1 つは配列クラス形式です)。 Memcache では、キーは SQL のハッシュ値であり、それに応じて有効期限 (1 時間など) が設定され、1 時間以内のデータがキャッシュから抽出され、効果的に負荷が軽減されます。データベース上で。欠点は、データがリアルタイムではないことです。データが変更されると、フロントエンドでリアルタイムに表示できなくなり、結局のところ、それぞれのデータの量が大量に占有される可能性があります。これは考慮する必要がある要素です。


Memcacheのセキュリティ
上記のMemcacheサーバーはクライアントを介して直接接続されており、検証プロセスなしで直接動作します。サーバーが直接インターネットに公開されている場合、より危険であり、少なくともデータ漏洩が発生します。 Mecache は root 権限で実行されているため、無関係な人が侵入したり、さらに悪いことにサーバーに侵入されたりする可能性があり、未知のバグやバッファ オーバーフローが存在する可能性があります。これらは私たちには未知であるため、リスクは予見できます。セキュリティの観点から、ハッカーの侵入やデータ漏洩を防ぐために 2 つの提案をさせていただきます。


イントラネット アクセス
2 つのサーバー間 (通常は Web サーバーと Memcache サーバーの間) でイントラネット アクセスを使用するのが最善です。一般的なサーバーには 2 つのネットワーク カードがあり、1 つはインターネットを指し、もう 1 つはイントラネットを指します。次に、Web サーバーがイントラネット ネットワーク カードを介して Memcache サーバーにアクセスできるようにし、Memcache サーバーの IP アドレスと IP アドレスを監視します。イントラネットのポートとイントラネット アクセスにより、他の不正アクセスを効果的に防止できます。

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

# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid


Memcache サーバーは、イントラネット経由で IP 192.168.0.200 の 11211 ポートをリッスンするように設定されており、1024MB のメモリを占有して、最大 1024 の同時接続を許可します。

ファイアウォールのセットアップ
両方のサーバーがインターネットに接続されており、外部 IP 経由で Memcache にアクセスする必要がある場合、ファイアウォールまたはエージェントを使用して不正なアクセスをフィルタリングすることを検討できます。 。一般に、Linux では、FreeBSD で iptables または ipfw を使用して、一部の不正アクセスを防止するルールを指定できます。たとえば、Web サーバーに Memcache サーバーへのアクセスのみを許可し、他のアクセスをブロックするように設定できます。

コードは次のとおりです:
# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.16 8 .0.2 –dport 11211 -j ACCEPT


上記の iptables ルールは、192.168.0.2 Web サーバーに Memcache サーバーへのアクセスを許可するだけであり、これに応じて、いくつかの他のルールを追加できます。セキュリティを強化します。これは必要に応じて実行できます。

実戦

//memcached設定
/*******************************************/
$mem_ip='127.0.0.1';
$mem_port=11211;
$mem_prefix='';
/*******************************************/

/*******************************************/
//セッション memcached 構成。独立した memcache サービス (異なる IP または異なるポート番号) に構成してください。
// 複数のミラー ステーション設定は同じである必要があります。そうでない場合、セッションは失われます
//競合を避けるために他のプログラムがこのサービスを使用することはできません。
/*******************************************/
$session_mem_ip='127.0.0.1';
$session_mem_port=11212;

function Instance_Memcached()
{
static $mem=false;
if($mem==false && isset($GLOBALS['mem_ip']) && isset($GLOBALS['mem_port']) && extension_loaded('memcache'))
{
$mem=new Memcache;
$mem->pconnect($GLOBALS[ 'mem_ip'],$GLOBALS['mem_port']) または die('memcache サーバーに接続できません!');
}
return $mem;
}

以上がmemcache の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
前の記事:JavaScriptを使用してHTMLのデータをExcelテーブルにエクスポートします 次の記事:WeChatパブリックアカウント開発、3段階配信マイクロモール、WeChatミニプログラムカスタマイズ開発
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!