memcacheの原理


memcacheは無料でオープンソースで高性能で分散メモリオブジェクトを持つキャッシュシステムであり、データベース負荷を軽減することで動的webアプリケーションを加速させ、Webサイトへのアクセス速度を向上させる.memcacheは、頻繁にアクセスするデータをkey-valueでメモリにキャッシュします.
memcacheとデータベースのコラボレーションプロセス:
1、クライアントはmemcacheサーバーに要求を送信し、memcacheは要求のデータがmemcache上にあるかどうかを検査し、存在する場合、直接クライアントにデータを返す
2、データがmemcacheにない場合、memcacheはデータベースを問合せ、データベースはクライアントにデータを返し、同時にデータをmemcacheにキャッシュする
3、データベースデータの更新のたびにmemcacheのデータを同時に更新し、データの一致を保つ
4、memcacheのメモリ容量が切れた場合、LRUアルゴリズムを使用して、最近最も少ないkey/valueを置き換えます.
memcacheの作業手順
memcacheはC/Sアーキテクチャを採用し、サービス側はサービスデーモンプロセスを開始し、指定されたIPとポートを傍受し、クライアント接続を待機している状態である.複数のサービス・エンドは連携して作業できますが、各サーバ間では通信も共有もせず、クライアントの設計によりmemcacheが大規模なキャッシュをサポートできます.
データはkey/valueでmemcacheのメモリに保存されるのでアクセス速度は速いが、サーバが再起動するとメモリのデータは消えてしまう.
memcacheのメモリ割り当てと管理
memcacheはslab allocationメカニズムを使用してメモリを割り当て、管理します.予め定められたサイズに従ってmemcacheに割り当てられたメモリは、同じ長さのメモリブロック群に分割され、これらのメモリブロックは解放されない.
利点:再利用可能
欠点:メモリが浪費される可能性があります.例えば、100バイトのデータを200バイトのメモリブロックに格納すると、100バイトのメモリが浪費されます.
解決策:memcacheを起動するときに「-f」オプションを指定し、異なるメモリブロックグループ間の長さ勾配を制御します.デフォルトは1.25です.
memcacheの削除メカニズム
memcacheにデータを格納する場合、データの有効期限を指定できます.データが有効期限切れになると、クライアントはkeyで値を取り出すことができず、ストレージ領域が再使用されます.しかしmemcacheは、格納されたデータが期限切れになったかどうかを監視するのではなく、key値を取得したときに期限切れになったかどうかを確認します.このようなポリシーでは、期限切れ検出にcpuリソースを浪費することはありません.
memcacheは、スペースを割り当てるときに期限切れのkey/valueスペースを優先的に使用しますが、メモリスペースがいっぱいになると、memcacheはLRUアルゴリズムを使用してスペースを割り当て、最近最も少ない使用データを削除し、新しいデータにスペースを割り当てます.LRUアルゴリズムを使用しない場合は、memcacheを起動するときに'-M'パラメータを使用します.これにより、メモリが消費されると、エラーメッセージが返されます.
マルチmemcacheサーバ連携
複数のmemcacheサーバがある場合、クライアントにはサーバリスト情報があり、クライアントがデータを格納する場合、クライアントはまず一定の分散アルゴリズムに基づいてどのサーバにデータを格納するかを決定する.データを取得すると、クライアントは、同じアルゴリズムに基づいてデータが存在するサーバを決定し、そのサーバにデータを取得する.
利点:異なるデータを異なるサーバに分散保存し、1台のサーバに障害が発生した場合、このサーバ上のデータにアクセスできないだけで、他のサーバ上のデータは影響を受けません.
クライアントで一般的な分散アルゴリズム
1、剰余分布アルゴリズム:まずキーの整数ハッシュ値を求めて、それからサーバー台数で割って、剰余数によってどのサーバーにデータを保存するかを確定する.
利点:計算が簡単で、効率が高い
欠点:サーバが増加または減少すると、すべてのキャッシュが無効になります.
2、整合性ハッシュアルゴリズム:memcacheサーバノードのハッシュ値を算出し、0から2^32の円に割り当て、データのキーのハッシュ値を算出して円にマッピングし、データマッピングの位置から時計回りに検索し、検索した最初のサーバにデータを保存する.
利点:サーバ数が変化すると、影響範囲が小さく、キャッシュの失効量を最小限に抑えることができます.
memcacheインストールの注意:
1、libeventをインストールする
2、/usr/local/libを/etc/ldに加える.so.conf中
[root@lzs ~]#echo "/usr/local/lib" >> /etc/ld.so.conf
[root@lzs ~]#ldconfig

memcacheの起動
/usr/local/bin/memcached -m 20m -p 11211 -d -u root -P /var/run/memcached.pid -c 1024

-m
memcacheに割り当てられたメモリサイズを指定
-p
memcacheが傍受するtcpポートを指定します(デフォルト11211)
-d
デーモンとしてバックグラウンドで実行
-u
memcacheを実行するユーザーの指定
-P
pidファイルの指定
-c
memcacheの最大同時接続数を指定します(デフォルト1024)
起動後telnet接続テストを使用できます