Memcache とは何ですか?
Memcache は、最初は LiveJournal を提供するために使用され、現在、世界中の多くの人々がこのキャッシュ プロジェクトを使用して、データベース チュートリアルの負荷を共有しています。
任意の数の接続を処理でき、ノンブロッキングのネットワーク IO を使用します。 Memcached の動作メカニズムは、メモリ内のスペースを開いて HashTable を作成することであるため、Memcached はこれらの HashTable を独自に管理します。
Memcache 公式 Web サイト: http://www.danga.com/memcached、より詳しい情報はここでご覧いただけます
なぜ Memcache と memcached という 2 つの名前があるのですか?
実際、Memcache はこのプロジェクトの名前であり、memcached はサーバー側のメイン プログラム ファイルの名前です。 1 つはプロジェクト名で、もう 1 つはメイン プログラムのファイル名です。インターネット上では理解できず、これらを同じ意味で使用している人がたくさんいました。
Memcache のインストール
は、memcache サーバーのインストールと memcached クライアントのインストールの 2 つのプロセスに分かれています。
いわゆるサーバー側インストールは、データを保存するためにサーバー (通常は Linux システム) に Memcache をインストールすることです
いわゆるクライアント側インストールは、PHP チュートリアル (または他のプログラム、Memcache、およびその他の優れた API インターフェイスを指します) Memcache が提供する機能を使用するには、PHP で拡張機能を追加する必要があります。
PHP の Memcache
次のようにコードをコピーします:
< ?php
//Connect
$mem = new Memcache;//データを保存 $mem->set('key1', 'これは最初の値', 0, 60);
$val = $mem->get('key1');//データを置換$mem->replace('key1', 'これは置換値です', 0, 60);
echo "key1 の値を取得: " . $val ."
";
$val = $ mem->get('key1');//arr = array('aaa', ' bbb', 'ccc', 'ddd');
echo "key1 の値を取得します: " . $val . "
"
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2'); echo "key2 の値を取得: ";echo "$val2 = $mem->get('key2');
"
$mem->delete('key1'); $ mem->get('key1');
echo "key1 値を取得: " . $val . "
"
$mem->flush() ;
echo "key2 値を取得: ";
"; connection
$mem->close();
?>
正常であれば、ブラウザは次のように出力します:
key1 値の取得: これは最初の値です
key1 値の取得: これは置換値です
key2 値の取得: 配列( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
key1値の取得:
key2値の取得:
プログラムコード解析
Memcacheの初期化オブジェクト:
$mem = new Memcache;
Memcache サーバーに接続します。最初のパラメーターはサーバーの IP アドレスまたはホスト名です。$mem->set ('key1', 'This is first value', 0, 60);Memcache サーバーからデータを取得します。これはデータを取得するためのキーです。これは key1 に設定されています。このデータを取得した後、次のように出力します:
$ mem-> connect("192.168.0.200", 12000);
データを Memcache サーバーに保存します。最初のパラメーターは、データを見つけるために使用されます。2 番目のパラメーターは、必要なデータの内容です。 、ここは文字列です。3 番目のパラメータはマークで、通常は 0 または MEMCACHE_COMPRESSED に設定されます。4 番目のパラメータはデータの有効期間です。これは、この期間内であればデータが有効であることを意味します。渡された場合、このデータは Memcache サーバーによってクリアされます。単位は秒です。0 に設定すると、有効時間は 60 になります:
$val = $mem->get('key1');
echo "Get key1 value: "
次に、 replace メソッドを使用します。上記の key1 の値を置き換えます。 replace メソッドのパラメータは set と同じですが、最初のパラメータ key1 はデータ内容を置き換えるキーである必要があります:
$mem->replace ('key1', 'これは値を置き換えます', 0, 60);$ val = $mem->get('key1');
echo "Get key1 value: " .配列を保存することもできます。以下は、Memcache に配列を保存してから、戻って出力します。
$arr = array('aaa', 'bbb', 'ccc', 'ddd');次に、データの一部を削除します。delte インターフェイスを使用すると、Memcache サーバー内のこのキーのデータを削除できます。最終的な出力 $mem->delete('key1');
$mem->set('key2', $arr, 0, 60); >get('key2');
print_r($val2);
$val = $mem->get('key1');最後に、Memcache サーバーに保存されているデータをすべてクリアすると、最終的に出力された key2 データが空になり、最後に接続が閉じられることがわかります。 mem->flush();
echo "Get key1 value: " には結果はありません。 . "
";
$val2 = $ mem->get('key2');
print_r($val2);Memcache は元々分散アプリケーションをサポートしていましたが、より良いサポートを提供するためにクライアントがわずかに変更されました。たとえば、ユーザーベースの Web サイトの場合、各ユーザーはユーザー ID を持っているため、固定 ID に従って抽出してアクセスできます。たとえば、1 で始まるユーザーは に保存されます。最初の 1 つの Memcache サーバーでは、2 で始まるユーザーのデータが 2 番目の Memcache サーバーに保存され、まずユーザー ID に従ってアクセス データが変換され、アクセスされます。
Memcacheの使い方
Memcacheを使用したWebサイトの一般的なトラフィックは、比較的データベースへの負担を軽減するために、情報の一部をメモリ上に保存し、素早くアクセスできるようにするキャッシュ領域としてMemcacheが使用されます。フロントエンドで。結局のところ、単一の Memcache のメモリ容量には限界があります。ここでは私の個人的な意見を述べているだけであり、実践したわけではないので、参考としてのみ使用してください。
分散アプリケーション
ただし、これにはユーザー ID の判断が必要になるという欠点があります。ビジネスに一貫性がない場合、または他の種類のアプリケーションがあまり適していない可能性がある場合は、実際のビジネスに基づいて検討するか、より適切なアプリケーションを考えることができます。方法。
データベースの負荷を軽減する
これは比較的重要です。基本的に、すべてのデータはデータベースに頻繁にアクセスされるため、データベースのパフォーマンスが大幅に低下し、同時により多くのユーザーにサービスを提供できなくなります。 MySQL では、テーブルが頻繁にロックされる場合は、Memcache にデータベースへの負荷を分散させます。変更が比較的小さく、フロントエンドへの大規模な変更を必要としない方法で、現在のアーキテクチャを変更する方法が必要です。
私が検討している簡単な方法:
バックエンドデータベース操作モジュールは、すべての選択操作(更新/削除/挿入に関係なく)を抽出し、対応するSQLで対応するハッシュアルゴリズムを実行して、ハッシュデータキー( MD5 または SHA として)、Memcache でこのキーのデータを検索します。データが存在しない場合は、データがキャッシュに書き込まれていないことを意味し、データベースからデータを抽出します。データは配列クラス形式です。 、データを Memcache に設定します。キーはこの SQL のハッシュ値です。次に、それに応じて有効期限 (1 時間など) を設定します。そうすれば、1 時間内のデータがキャッシュから抽出され、効果的にデータベースに対するプレッシャー。欠点は、データがリアルタイムではないことです。データが変更されると、フロントエンドでリアルタイムに表示できなくなり、結局のところ、それぞれのデータの量が大量に占有される可能性があります。これは考慮する必要がある要素です。
Memcache のセキュリティ
イントラネット アクセス
# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
Memcache サーバーは、イントラネット、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.168.0.2 –dport 11 211 -j ACCEPT
上記の iptables ルールは、192.168.0.2 Web サーバーに Memcache サーバーへのアクセスのみを許可します。これに応じて、他のいくつかのルールを追加してセキュリティを強化することもできます。あなたのニーズに応じて。