この記事では主にPHPのMemcacheについて紹介します。Memcacheの紹介から始まり、Memcacheとmemcachedの違い、PHPのMemcacheの全操作方法、各操作方法の詳しい説明などを詳しく説明しています。必要な方は参考にしてください。それに
1. Memcache の概要
Memcache は danga.com のプロジェクトで、最初は LiveJournal に提供されていました。現在、世界中の多くの人々がこのキャッシュ プロジェクトを使用して独自の負荷の大きい Web サイトを構築し、データベースへの負荷を共有しています。任意の数の接続を処理でき、ノンブロッキング ネットワーク IO を使用します。 Memcached の動作メカニズムは、メモリ内のスペースを開いて HashTable を作成することであるため、Memcached はこれらの HashTable を管理するため、非常に高速です。
2. Memcache と memcached の違い
Memcache と memcached という 2 つの名前があるのはなぜですか?実際、Memcache はこのプロジェクトの名前であり、memcached はサーバー側のメイン プログラム ファイルの名前です。 1 つはプロジェクト名で、もう 1 つはメイン プログラムのファイル名です。インターネット上では理解できず、これらを同じ意味で使用している人がたくさんいました。
3. Memcache のサーバー側とクライアント側のインストール
これは、memcache サーバーのインストールと memcached クライアントのインストールの 2 つのプロセスに分かれています。
いわゆるサーバー側インストールは、データを保存するためにサーバー (通常は Linux システム) に Memcache をインストールすることです。
いわゆるクライアントインストールとは、PHP (または他のプログラム、Memcache には他の優れた API インターフェイスもあります) を指し、サーバー側で Memcache が提供する機能を使用するには、拡張機能を追加する必要があります。
4. 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 – 実行時にサーバーパラメータを変更します
5. PHPのMemcache操作方法の分解
Memcache::使用法を追加
コードは次のとおりです: 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 $失敗_コールバック ]] ]]]]] )
説明:
使用可能なサーバー アドレスを接続プールに追加します。接続は Memcache::addServer で開かれ、スクリプトの実行後に自動的に閉じられます。または、Memcache::close() で手動で閉じることもできます。同じ関数は memcache_add_server() です。
このメソッドを使用する場合 (Memcache::connect() および Memcache::pconnect() メソッドと比較して)、ネットワーク接続は必要な場合にのみ確立されるため、接続プール システムに多くのサーバーを追加することによってネットワーク接続が増加することはありません。多くのサーバーが使用されていない可能性があるため、負担がかかります。
他のサーバーが正常である限り、このメソッドの実行のどの段階でも障害回復が発生します。ユーザーはこれらの接続リクエストの障害に気づきません。あらゆる種類のソケットまたは memcached サーバーレベルのエラーがフェイルオーバーを引き起こす可能性があります。既存のキーの追加などの通常のクライアント エラーでは、フェールオーバーはトリガーされません。
パラメータ:
$ホストサーバーアドレス
$port サーバーポート
$persistent が永続的な接続かどうか
$weight は、すべてのサーバーの中のこのサーバーの重みです
$タイムアウト接続時間
$retry_interval接続再試行の間隔、デフォルトは 15、-1 に設定すると再試行なしを意味します
$status はサーバーのオンライン ステータスを制御します
$failure_callback を使用すると、エラー メッセージを処理するコールバック関数を設定できます。
戻り値:
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
例:
コードは次のとおりです:
$memcache = 新しい Memcache
$memcache->addServer('memcache_host', 11211);
$memcache->addServer('memcache_host2', 11211);
$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_add_server($memcache_obj, 'memcache_host2', 11211);?>
Memcache::使用法を閉じる
bool Memcache::close ( void )
説明:
memcache サーバー接続を閉じます。この関数は、長い接続を閉じません。長い接続は、Web サーバーがシャットダウンまたは再起動されたときにのみ閉じられます。同じ関数 memcache_close()
戻り値:
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
例:
コードは次のとおりです:
$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_close($memcache_obj);$memcache_obj = 新しい Memcache
$memcache_obj->connect('memcache_host', 11211);
$memcache_obj->close();?>
Memcache::connect の使用法
コードは次のとおりです: bool Memcache::connect ( string $host [, int $port [, int $timeout ]] )
説明:
memcached サーバー接続を開き、memcached サーバーへの接続を確立します。 Memcache::connect で開かれた接続は、スクリプトの実行後に自動的に閉じられます。 Memcache::close() を使用して接続を閉じることもできます。同じ関数は memcache_connect() です。
パラメータ:
$host: memcached がリッスンしているリンクのホストを指します。このパラメーターには、unix ドメイン名ソケットを使用する別の特別な接続メソッドがあります。ポートは0に設定する必要があります
$port: memcached がリッスンしているリンクのポートを指します。UNIX ドメイン名ソケットを使用する場合、ポートは 0 に設定する必要があります。
$timeout: デーモンへの接続に使用される秒数。デフォルト値の 1 秒を変更する場合は、接続が遅すぎるとキャッシュの利点が失われる可能性があることを考慮する必要があります。
戻り値:
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
例:
コードは次のとおりです:
$memcache_obj = memcache_connect('memcache_host', 11211);
$memcache = 新しい Memcache
$memcache->connect('memcache_host', 11211);
?>
memcache::デバッグ
コードは次のとおりです: 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: 削減したいキーの名前
値: 削減する値。
戻り値:
成功した場合は減算された値を返し、失敗した場合は false を返します。
例:
コードは次のとおりです:
$memcache = 新しい Memcache
$memcache->connect('localhost', 11211);
$memcache->set('test_item', 8);$memcache->increment('test_item', 4);
echo $memcache->decrement('test_item', 7);// 5 件を表示中
?>
この例では、Memcache::increment 関数も示しています。
Memcache::使用法を削除する
コードは次のとおりです: bool Memcache::delete ( string $key [, int $timeout ] )
説明:
パラメータ $timeout が設定されている場合、保存された値は設定された秒数後に期限切れになります。関数 memcache_delete() を使用することもできます。
戻り値:
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
例:
コードは次のとおりです:
$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_delete($memcache_obj, '削除するキー', 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 = 新しい Memcache
$memcache_obj->connect('memcache_host', 11211);
$var = $memcache_obj->get('some_key');
$memcache_obj = memcache_connect('memcache_host', 11211);
$var = memcache_get($memcache_obj, Array('some_key', 'another_key'));
$memcache_obj = 新しい 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 は返される必要があるタイプを示します: リセット、malloc、マップ、キャッシュダンプ、スラブ、アイテム、サイズ。
$slabid の最初のパラメータが「cachedump」に設定されている場合に使用されます。$limit の最初のパラメータが "cachedump" に設定されている場合に使用されます。
戻り値:
成功した場合は統計情報が返されます、失敗した場合はfalseが返されます
例:
コードは次のとおりです:
$memcache_obj = 新しい Memcache
$memcache_obj->addServer('memcache_host', 11211);
$memcache_obj->addServer('failed_host', 11211);
$stats = $memcache_obj->getExtendedStats();
//スラブメカニズムはメモリを割り当てて管理します$statsslab = $memcache_obj->getExtendedStats(slabs);
?>
Memcache::getServerStatus
コードは次のとおりです: int Memcache::getServerStatus ( string $host [, int $port ] )
説明:
サーバーを実行するためのパラメーターを取得します。サーバーのオンラインまたはオフラインのステータスを返します。同じ関数は memcache_get_server_status() です
パラメータ:
$host: リスニング接続のホスト
$port はリッスンしている接続ホストのポートで、デフォルトは 11211 です
戻り値:
サーバーのステータスが正常に返された場合、サーバーが起動していない場合は 0 が返され、その他の数字はサーバーが起動していることを示します。
例:
コードは次のとおりです:
$memcache = 新しい Memcache
$memcache->addServer('memcache_host', 11211);
echo $memcache->getServerStatus('memcache_host', 11211);
$memcache = memcache_connect('memcache_host', 11211);
echo memcache_get_server_status($memcache, 'memcache_host', 11211);
?>
Memcache::getStats
コードは次のとおりです: array Memcache::getStats ([ string $type [, int $slabid [, int $limit ]]] )
説明:
サーバーの実行統計を返します。同じ関数は memcache_get_stats() です
パラメータ:
$type は返される必要があるタイプを示します: リセット、malloc、マップ、キャッシュダンプ、スラブ、アイテム、サイズ。
$slabid の最初のパラメータが「cachedump」に設定されている場合に使用されます。$limit の最初のパラメータが "cachedump" に設定されている場合に使用されます。
Memcache::getVersion
コードは次のとおりです: string Memcache::getVersion (void)
説明:
実行中のMemcacheのバージョン情報を返します。同じ関数 memcache_get_version()
戻り値:
サーバーのバージョン情報が正常に返され、失敗した場合は false が返されます。
例:
コードは次のとおりです:
$memcache = 新しい Memcache
$memcache->connect('memcache_host', 11211);
echo $memcache->getVersion();
$memcache = memcache_connect('memcache_host', 11211);
echo memcache_get_version($memcache);
?>
Memcache::インクリメント
コードは次のとおりです: 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 ドメイン名ソケットを使用する別の特別な接続メソッドがあります。ポートは0に設定する必要があります
$port: memcached がリッスンしているリンクのポートを指します。UNIX ドメイン名ソケットを使用する場合、ポートは 0 に設定する必要があります。
$timeout: デーモンへの接続に使用される秒数。デフォルト値の 1 秒を変更する場合は、接続が遅すぎるとキャッシュの利点が失われる可能性があることを考慮する必要があります。
戻り値:
成功した場合は TRUE を返し、失敗した場合は FALSE を返します
コードは次のとおりです:
$memcache_obj = 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", "何らかの変数", false, 30);$memcache_obj->replace("test_key", "何らかの変数", 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 = 新しい Memcache
$memcache_obj->connect('memcache_host', 11211);
$memcache_obj->set('var_key', '非常に大きな変数', MEMCACHE_COMPRESSED, 50);
echo $memcache_obj->get('var_key');
Memcache::setCompressThreshold
コードは次のとおりです: bool Memcache::setCompressThreshold ( int $threshold [, float $min_ Savings ] )
説明:
一定サイズ以上のデータを圧縮します。同じ関数は memcache_set_compress_threshold() です
パラメータ:
setCompressThreshold メソッドには 2 つのパラメーターがあり、最初のパラメーターは処理データ サイズの臨界点を示し、2 番目のパラメーターは圧縮率を示します。デフォルトは 0.2 です。
戻り値:
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
例:
コードは次のとおりです:
$memcache_obj = 新しい Memcache
$memcache_obj->addServer('memcache_host', 11211);
$memcache_obj->setCompressThreshold(20000, 0.2);
$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_set_compress_threshold($memcache_obj, 20000, 0.2);
?>
Memcache::setServerParams
コードをコピーします コードは次のとおりです: bool Memcache::setServerParams ( string $host [, int $port [, int $timeout [, int$retry_interval [, bool $status [, callback $failure_callback ]]]]] )
説明:
実行時にサーバーパラメータを変更します。同じ関数は memcache_set_server_params() です。
パラメータ:
$ホストサーバーアドレス
$port サーバーポート
$タイムアウト接続時間
$retry_interval接続再試行の間隔、デフォルトは 15、-1 に設定すると再試行なしを意味します
$status はサーバーのオンライン ステータスを制御します
$failure_callback を使用すると、エラー メッセージを処理するコールバック関数を設定できます。
戻り値:
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
例:
コードは次のとおりです:
function _callback_memcache_failure($host, $port) {
print "memcache '$host:$port' が失敗しました";
}
$memcache = 新しい Memcache
// オフライン モードでサーバーを追加します
$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, '_callback_memcache_failure');
?>
6. 包括的な使用例
コードは次のとおりです:
//接続
$mem = 新しい Memcache
$mem->connect("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 = 配列('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');echo "key2 値を取得: ";
print_r($val2);エコー "
";
$mem->delete('key1');
$val = $mem->get('key1');
echo "key1 の値を取得します: " . $val . "//すべてのデータを消去します
$mem->flush();
$val2 = $mem->get('key2');echo "key2 値を取得: ";
print_r($val2);エコー "
";
$mem->close();
?>
正常であれば、ブラウザは次のように出力します:
コードは次のとおりです:
key1 の値を取得: これが最初の値です
key1 の値を取得: これは値を置き換えます
key2 の値を取得: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
key1の値を取得します:
key2の値を取得します:
7. サンプルプログラムのコード解析
Memcache オブジェクトを初期化します: $mem = new Memcache;
Memcache サーバーに接続します。最初のパラメーターはサーバーの IP アドレスで、2 番目のパラメーターは Memcache のオープン ポートです: $mem->connect("192.168.0.200", 12000) );データを Memcache サーバーに保存します。最初のパラメータはデータのキーであり、2 番目のパラメータは保存する必要があるデータの内容です。通常は 0 または MEMCACHE_COMPRESSED に設定します。これは、データがこの期間内に有効であることを意味します。単位は秒です。 0 に設定すると永久に有効になります。ここでは 1 分間有効となる 60 を設定します。 $mem->set('key1', 'This is first value', 0, 60) );
Memcache サーバーからデータを取得します。これには、データを取得するためのキーとなるパラメーターが 1 つだけあります。このデータを取得した後、出力を出力します。
コードは次のとおりです:
$val = $mem->get('key1');
echo "key1 の値を取得します: " . $val;
ここで、replace メソッドを使用して、上記の key1 の値を置き換えます。replace メソッドのパラメータは設定されたものと同じですが、最初のパラメータ key1 は、データの内容を置き換えるキーである必要があります。
コードは次のとおりです:
$mem->replace('key1', 'これは置換値です', 0, 60);
$val = $mem->get('key1');echo "key1 の値を取得します: " . $val;
同様に、Memcache も配列を保存できます。以下は Memcache に保存され、取得されて出力される配列です。
コードは次のとおりです:
$arr = 配列('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);$val2 = $mem->get('key2');
print_r($val2);
ここでデータを削除し、delte インターフェイスを使用します。パラメータはキーです。その後、Memcache サーバー内のキーのデータを削除できます。最終的な出力には結果はありません。
コードは次のとおりです: $mem->delete('key1');$val = $mem->get('key1');
echo "key1 の値を取得します: " . $val .";
最後に、Memcache サーバーに保存されているすべてのデータを消去します。最終的に出力された key2 データが空になり、最後に接続が閉じられることがわかります。
コードは次のとおりです: $mem->flush();
$val2 = $mem->get('key2');echo "key2 値を取得: ";
print_r($val2);エコー "
";
8. Memcache を使用する場合と Memcache の使用環境
Memcache を使用する Web サイトは、一般的に比較的大きなトラフィックを伴います。データベースへの負荷を軽減するために、Memcache は、フロントエンドで高速にアクセスできるように、情報の一部をメモリに保存するキャッシュ領域として使用されます。結局のところ、単一の Memcache のメモリ容量には限界があります。ここでは私の個人的な意見を述べているだけであり、実践したわけではないので、参考としてのみ使用してください。
分散アプリケーション
Memcache はもともと分散配布をサポートしていますが、より良いサポートを提供するためにクライアントがわずかに変更されました。たとえば、ユーザーベースの Web サイトの場合、各ユーザーはユーザー ID を持っているため、固定 ID に従って抽出してアクセスできます。たとえば、1 で始まるユーザーは に保存されます。最初の 1 つの Memcache サーバーでは、2 で始まるユーザーのデータが 2 番目の Memcache サーバーに保存され、まずユーザー ID に従ってアクセス データが変換され、アクセスされます。
ただし、これにはユーザー ID を判断する必要があるという欠点があります。ビジネスに一貫性がない場合、または他の種類のアプリケーションがあまり適していない可能性がある場合は、実際のビジネスに基づいて検討するか、より適切な方法を考えることができます。
データベースの負荷を軽減します
これはさらに重要で、基本的にすべてのデータがデータベースに頻繁にアクセスされると、データベースのパフォーマンスが大幅に低下し、同時により多くのユーザーにサービスを提供できなくなります。 .table を使用して、Memcache にデータベースへの負荷を分散させます。変更が比較的小さく、フロントエンドへの大規模な変更を必要としない方法で、現在のアーキテクチャを変更する方法が必要です。
私が考えた簡単な方法:
バックエンドのデータベース操作モジュールは、すべての選択操作 (更新/削除/挿入に関係なく) を抽出し、対応する SQL で対応するハッシュ アルゴリズムを実行してハッシュ データ キー (MD5 や SHA など) を計算し、これを配置します。キーは Memcache 内のデータを検索します。データが存在しない場合は、データがデータベースから抽出され、そのデータが Memcache に設定されます。 key は SQL のハッシュ値であり、それに応じて有効期限を 1 時間などに設定すると、1 時間以内にデータがキャッシュから抽出され、データベースへの負荷が効果的に軽減されます。欠点は、データがリアルタイムではないことです。データが変更されると、フロントエンドでリアルタイムに表示できなくなり、結局のところ、それぞれのデータの量が大量に占有される可能性があります。これは考慮する必要がある要素です。
9. 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 サーバーは、イントラネット上の 192.168.0.200 IP の 11211 ポートをリッスンするように設定されており、1024 MB のメモリを占有して、最大 1024 の同時接続を許可します。
ファイアウォールを設定する
ファイアウォールはシンプルで効果的な方法です。両方のサーバーがインターネットに接続されており、外部 IP 経由で Memcache にアクセスする必要がある場合は、不正なアクセスをフィルタリングするためにファイアウォールまたはプロキシ プログラムの使用を検討できます。一般に、Linux では、FreeBSD で iptables または ipfw を使用して、一部の不正アクセスを防止するルールを指定できます。たとえば、Web サーバーに Memcache サーバーへのアクセスのみを許可し、他のアクセスをブロックするように設定できます。
コードをコピーします。コードは次のとおりです: # iptables -F
# iptables -P 入力ドロップ
# iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT
上記の iptables ルールは、192.168.0.2 Web サーバーのみが Memcache サーバーへのアクセスを許可するため、一部の不正アクセスを効果的に防止できます。これに応じて、セキュリティを強化するために他のルールを追加することもできます。する。