メモリ+キャッシュメモリキャッシュ
memcache は、LiveJournal の Brad Fitzpatrick によって開発された 分散型 高速 キャッシング システム のセットで、現在多くの Web サイト、特に頻繁なアクセスを必要とする大規模な Web サイトで使用されています。データベースへのアクセス速度の向上効果は非常に大きいです。これは、BSD ライセンスに基づいてリリースされた オープン ソース ソフトウェア のセットです。 [百度百科事典より抜粋]
公式ウェブサイト: http://memcached.org/
分散: 複数の Memcache サーバーがデータ アーキテクチャを管理します。
キャッシュ システム: ユーザーがクエリしたデータをメモリにキャッシュし、次回からメモリから直接取得できるようにします。ディスク IO オーバーヘッドを削減します。
nosqlとは何ですか? (SQLリレーショナルデータベース)
回答: MySQL はリレーショナル データベースと呼ばれます (主な特徴は、2 次元のテーブル構造 (テーブル内の行と列) を持ち、テーブル間にリレーションシップがあることです) (oracle (Java)、db2、sqlserver) )
非リレーショナルデータ: SQL文をクエリとして使用しないデータベース(データを保存するシステム)であり、厳密な意味での2次元テーブルの概念はありません。そのデータ構造はすべて巨大なハッシュテーブル(キー-バリュー)です
ハッシュ テーブルの利点: 時間計算量は 0 (1) です。データが増加しても、クエリ時間は 1 桁 (1 秒) 変化しません。
ハッシュテーブルの欠点: ハッシュの衝突 異なるキーが同じ値に対応する
key1 ===MD5(sql) |
アシオン |
キー2 |
12 |
キー3 |
深セン |
key4 |
iPhone |
selinux をすぐに有効にします
2.1 環境の準備
Linux 環境では、gcc、g-c++、make (makefile)、cmake、autoconfig (configure)、libtool などのツールが必要です
Linuxでインターネットに接続している場合は、次のコマンドを使用します
# yum install -y gcc make cmake autoconfig libtool
-y 確認インタラクティブを使用する必要はありません
2.2 memcachedをコンパイルしてインストールします
memcached は libevent ライブラリに依存しているため、最初にインストールし、それぞれの公式 Web サイトから安定バージョンをダウンロードする必要があります
libeventnt公式ウェブサイト: http://libevent.org/
memcache 公式ウェブサイト: http://memcached.org/
まず libevent をコンパイルしてインストールし、次に memcached をコンパイルしてインストールします。同時に、memcached をインストールするときに libevent のインストール パスを指定する必要があります。
具体的な手順:
アップロード
まず libevent をダウンロードし、解凍してインストールします (通常、Linux でのソフトウェアのインストールは /usr/local/src ディレクトリに配置され、インストールされたソフトウェアは通常 /usr/local/NAME に配置されます)。
# ./configure --prefix=/usr/local/libevent && make && make install
b. memcache をインストールし、解凍し、コンパイルしてインストールします
# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent && make && make install
2.3 memcached の起動
# /usr/local/memcached/bin/memcached -m 64 -p 11211 -u nothing -vv
注: この時点で Memcached は正常に起動しますが、情報はコンソールに出力されます。
memcached をバックグラウンド でサービスとして開始したい場合は、 -d オプション (デーモン バックグラウンド) を追加するだけです
# /usr/local/memcached/bin/memcached -m 64 -p 11211 -u nothing -d
サーバーが正常に起動したかどうかを確認するには?
# ps axu
d
パラメータ情報を表示する必要がある場合は、memcached -h を使用してヘルプを表示します:
memcache オペレーション
テキストベースのプロトコル、http プロトコルと同様、対話に Telnet を直接使用できます
Telnet 操作を使用します (終了するには終了します)
#テレントサーバーIP 11211
接続後、Ctrl +
]を使用して Telnet エコーを開きます
2. 基本的なコマンド:
memcache の追加、削除、変更、検索コマンドを学習します:キーフラグの有効期限の長さを追加します
キー: 名前
フラグ: 1 つの memcache が文字列として保存されます
expire: 有効期限、memcache 時間
length: データ長(B)
※追加増加
# add name 1 0 2 # memcache サーバー上のキーを持つ名前の値を追加します。長さは 2 バイトで、有効期間は長期です。
有効期限を理解する方法
キャッシュの有効期間を設定します。3つの形式があります最近使用されていない原則
※削除削除
#キーを削除
※交換交換
# キーフラグの有効期限の長さを置き換えます
※ゲットゲット
#キーを取得します
※set データに replace がある場合、ない場合は追加
# キーフラグの有効期限の長さを設定します
の名前が存在します:
年齢は存在しません:
※増額増加
# 年齢 NUMBER 増加
※減少
#decr 年齢番号
※stats 統計情報 memcache サーバー情報
#統計
※flush_all すべてのデータを消去します
#flush_all
ベータ版: テスト版: 通常、小さなバグがいくつかありますが、問題がある場合はユーザーが使用して確認する必要があります。それでは修理です
アルファ: 内部ベータ版: 開発中に内部で使用されるバージョン。一般に、このバージョンには多くのバグがあります。ただし、このバージョンには新しい機能が追加されることがよくあります。 (通常、新しい企業のみがそれを試行します。) アルファ版にはいくつかの補償があります。
stable: 安定版: 基本的にバグがなく、安定して実行できます。
FTP 使用上の注意:
#cls
# CD
# vim .bashrc
Linux ダウンロードラストラインモード
# :x 小文字で終了 wq
編集モードの Linux
#Zキャピタル
# /usr/local/php/bin/phpize 絶対パス phpize
d. 上記で生成された構成ファイルを使用してシステム情報を収集します。インストール パスを指定する必要はありません。 # ./configure --with-php-config=/usr/local/php/bin/php-config は、php 設定ファイルの検索方法を示します
e.コンパイルとインストールを実行します
#メイク&&メイクインストール
注: 上記のコマンドを実行すると、構造を表示できます
# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
注: Linux で php.ini 設定ファイルの場所を確認するにはどうすればよいですか?
解決策: phpinfo();
注: Linux では、設定ファイルを変更する前に必ずバックアップしてください
php.ini-backup-2016-1-12
注: .so ファイルとは何ですか?
.so は Linux では共有オブジェクトであり、Windows では .dll ファイルの一種です
注: Linux では、これを使用してサービスを閉じることができます
# pkill -9 httpd
#ps grep httpd |
#ps grep httpd |
次のように、上で生成したアドレスをphp.ini設定ファイルに追加します
extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/extension=memcacahe.so
test.php ファイルを作成して、php に memcache モジュールがあるかどうかをテストします
phpはmemcacheを操作し、値を保存および取得します
memcached のメモリ管理と削除メカニズム
注: Memcache の最大値は 1M スペースのみです。
注: メモリの断片化は常に存在します。それは、メモリの断片化を最小限に抑えることができる方法によって異なります。
1. 記憶の断片化とは何ですか?
この種のメモリ キャッシュ システムを使用すると、継続的に適用と解放が行われるため、使用できない小さなメモリの断片が形成されます。この現象はメモリの断片化と呼ばれます。この小さな赤いブロックは、オペレーティング システムが使用できない領域です。
の解き方?
各スラブクラスのサイズは1M) 最小単位はチャンクと呼ばれ、データを保存するための倉庫です
複数の小さなユニットがチャンクを形成します: 複数の小さなブロックで構成されます (すべての小さなブロックは同じサイズです)
各スラブクラスのサイズは1Mです
memcache の適切なサイズを選択するにはどうすればよいですか?
注: 122 バイトのスラブがいっぱいで、100 バイトのデータが来た場合、どこに保存する必要がありますか? 回答: 144 は間違いなく存在しません。チャンク 122 にまだ存在しており、データ ストレージの実装には LRU アルゴリズムが使用されています。
固定チャンクによるメモリの無駄、22B
係数調整
デフォルトは 1.25 で、隣接するチャンク間の比率が増加係数となります。 Web サイトのビジネスに応じてキャッシュ係数のサイズを調整できます。
それぞれのビジネスが異なり、必要な最小チャンクも異なるためです。データは独自のサイズを設定できるため、このパラメーターを使用すると、システムが自社のビジネスにさらに適応できるようになります。
memcache の
例: set(name, asion, 0, 3600) は 3600 秒後に期限切れになります。get がクエリされた場合にのみ、期限切れかどうかが検出され、期限切れの場合は削除されます。 。
例 # add name 1 8 2 8秒経過すると無効になるのか、存在しないのか?統計による分析
分析: 存在しないのではなく、無効です。次回取得するときにのみ、memcache が期限切れかどうかを確認し、期限切れの場合は削除します
memcache の LRU アルゴリズム
名前が示すように、これは「最も最近使用されていない」レコードを削除するメカニズムです。そのため、memcachedのメモリ容量が不足した場合(スラブクラスから新しい容量が取得できない場合)、最近使用されていないレコードから検索して空にします
時間が新しいレコードに割り当てられます。キャッシュの実用的な観点から見ると、このモデルは理想的です。
mecache のデータスペース (デフォルトは 64M) がいっぱいになった場合、データを保存し続けることができますか?
回答: 保存できます。有効期限が切れていない場合は、最もアクティブでないデータを削除して、後でデータを追加するためのスペースを確保する必要があります。
例: 122Bytesのスラブを例にとると、データがいっぱいになったときに100Bytesのデータが来た場合、どう対処すればよいでしょうか? (永続効果があってもキックされます)
分析: メモリ管理 LRU アルゴリズム、FIFO アルゴリズム
注: vim で ctrl+s を入力すると、ctrl+q を使用して終了できます
-p リスニングポート
-l 接続の IP アドレス、デフォルトはローカルマシンです
-d start は memcached サービスを開始します
-d restart memcached サービスを再起動します
-d stop|shutdown 実行中の memcached サービスをシャットダウンします
-d install memcached サービスをインストールします
-d アンインストール memcached サービスをアンインストールします
-u Run as (root として実行する場合のみ有効)
-m 最大メモリ使用量 (MB)。デフォルトは 64MB
注: システムが 32 ビットの場合、最大制限は 2G ですが、システムが 64 ビットの場合、制限はありません。
-M メモリが枯渇した場合、アイテムを削除する代わりにエラーを返します
-c 同時接続の最大数、デフォルトは 1024 です
-f ブロック サイズ増加係数、デフォルトは 1.25 です
-n 最小割り当てスペース、キー + 値 + フラグのデフォルトは 48 です
-h ヘルプを表示
-v 警告メッセージとエラーメッセージを出力します
-vv はクライアントのリクエストと戻り情報を出力します
-i memcached と libevent の著作権情報を出力します
保存: 1. ファイル 2. mysql
質問: フォルダー内のセッション ファイルが多すぎて取得が遅くなる場合、どう対処すればよいですか?
答え: 階層化処理
Memcache を使用して保存します。Memcache は分散ストレージを使用します (ストレージに複数の Memcache を使用します)
memcache を使用してセッションを保存する
1. php.iniファイルを変更します。設定情報は次のとおりです
Session.save_handler = memcache #memcache を使用してセッションを保存することを表します
Session.save_path ="tcp://127.0.0.1:11211" # memcache サーバーのアドレスとポートを指定します
1. セッションを開いてセッションを保存します
配信とは何ですか?
単一の memcache のサービス機能には限界があるため、複数の memcache を使用してキャッシュ機能を提供できます。このアーキテクチャは、memcache の 分散キャッシュ (クラスター) ストレージ システム
と呼ばれます。
実装方法は?
このようにして、さまざまな Memcache サーバーにデータを分散する方法が理解できます。
分散はクライアント上で実装されており、データは一定のアルゴリズムに従ってそのmemcacheサーバーに保存されます データを取得する際には、以前と同じアルゴリズムに従って、対応するmemcacheサーバーからデータが取得されます。
分散アルゴリズム
crc32( key ) % 3 です。 crc32() この関数は文字列を 32 ビット整数に変換できます
短所: 特定のサーバーがダウンしたり、サーバーを追加する必要がある場合、除数が変更されているため、基本的にその時点ではキャッシュされたデータはすべて無効になります。 ゆるい計算式、ヒット率=取得データ/総数1/N Nはサーバー数を表します
原因による問題: memcache がダウンすると、キャッシュされたデータが無効になります。このとき、MySQL への負荷が急激に増加します。
このとき、MySQL はクラッシュし、MySQL を再起動すると、短期間で再びクラッシュし、その後、わずかな遅延 (キャッシュの一部が再確立される) で再びクラッシュします。時間が経つにつれて、MySQL は基本的に安定し、キャッシュ システムが正常に確立されました。キャッシュされたデータが存在しないため、すべてのリクエストを MySQL に転送する必要があります。この現象は memcache 雪崩現象と呼ばれます。
概要:
一貫性のあるハッシュによる分散の実装
0 から 2^32 までの非常に多くの正の整数が分散されたリングがあると想像してください。
次に、ハッシュ関数(crc32())でサーバのノード数を計算した後、時計回りに上記リングにマッピングします。
上記のハッシュ関数に従って保存する必要のあるデータのキーを計算した後、それを時計回りにそれ自身と同じ大きさのノードに保存します。
注: memcache がダウンしている限り、データは確実に失われます。ただし、データ損失を最小限に抑え、一貫性のあるハッシュを使用する方法を見つけてください。たとえ 1 台のサーバーがダウンしても、影響を受けるのは 1 台のサーバー上のデータだけです。
仮想ノード: タスクを共有する
雪崩の原因は何ですか?
解決策: 一貫したハッシュアルゴリズム
解決策: キャッシュ時間を範囲内 (3 ~ 9 時間) のランダムな時間に設定します
特定の memcache ノードのキャッシュ データの障害により、他の memcache ノードのキャッシュ ヒット率が低下し、キャッシュ内の欠落したデータが短期間で MySQL データベースにクエリされることになり、大きな負荷がかかります。これは、キャッシュ雪崩現象と呼ばれるダウンタイムを引き起こします。
MySQLを再起動すると、また短時間でクラッシュしましたが、MySQLを繰り返し起動したところ、キャッシュされたデータの一部が確立され、キャッシュが完全に再構築され、MySQLがクラッシュすることはなくなりました。
解決策: キャッシュ時間を範囲 (3 ~ 9 時間) 内のランダムな値に設定して、異なる期間で期限切れになり、再構築作業が異なる時間に割り当てられるようにします。
答え:
答え:
memcache 自体の設計は非常にシンプルであるため、権限の設定にまったく制限がありません。なぜ権限を設定しないのでしょうか? シンプルにするためにキャッシュ機能のみを提供します
192.168.1.221 ---224
3. ファイルを使用してセッションファイルを保存する場合、ファイルが多すぎる場合はどうすればよいですか?
一般的に、セッション ファイルの数が 65535 を超えると、この時点でセッションの取得が非常に遅くなります。これは、PHP コードの実行が非常に遅いことを意味します。
答え:
階層化処理: 1つのフォルダーの下にA-Zで始まるフォルダーを作成し、その後にA_Zが作成されます
処理に memcache を使用する: 単一の memcache の処理能力が制限されている場合は、分散された memcache を使用して処理します
回答: ロード バランシング クラスターは高可用性機能を提供します。特定のマシンがダウンしても、通常のサービスを提供できますが、サービスの提供は少し難しくなります。
負荷分散クラスターはキープアライブメカニズムを提供していないためです。監視メカニズム
プロジェクトで Memcache を使用するにはどうすればよいですか?
Memcache の目的は、データをキャッシュし、MySQL への負荷を軽減することです。
答え:
extension_dir='上で生成されたディレクトリ'
拡張子='NAME.so'