ディレクトリ
Memcachedのご紹介
MCの紹介
memcachedのは、フリーでオープンソース、高性能、分散メモリオブジェクト・ストレージ・システムであり、
任意のデータ記憶タイル(文字列、オブジェクト)のためのメモリキー値ストアに基づいて、
簡単なキー値記憶システムであります
二つの部分で、サーバーとクライアントに分かれて
memcachedを:1.サーバー
2.クライアント:memcacheの
目的:動的なWebアプリケーションの速度を向上させるために、データベース・アクセスの数を減らし、データベースクエリの結果をキャッシュすることにより、スケーラビリティを向上させます。
MCのプロパティ
- C / Sモード・アーキテクチャ:C、コードの2000の以上の行の合計に書き込ま。
シンプルなプロトコル:テキスト行に基づいて使用されるプロトコルは、telnet / NC直接操作Memcachedのサービス・アクセス・データを経由して。
- サポートのepoll / kqueueの非同期I / Oモデル:イベント処理通知メカニズムとしてlibeventを使用。
- キー/値ペアのデータ型のキー
- 純粋なメモリキャッシュ、高効率
- 分散クラスタのサポート
- マルチプロセス
MCのエンタープライズ・アプリケーションのシナリオ
1.完全なキャッシュ(簡単)
たとえば:Jingdongは商品の分類は、Memcachedの事前に配置することができ、その後、外国でのデータアクセスを提供し、これを「プリデータ」と呼ばれています
2.ホット・キャッシュ(ハード)
ホット・バッファは、典型的には、例えば淘宝売り手、ユーザによって製品を更新するために使用され、売り手ときに、新しい商品、商品が淘宝網プログラムはデータベースに書き込まれ、データのこの部分、書き込まれたデータを読み出し、放電Memcachedのに、次回はあなたがmemcachedのからの要求の除去へ直接、本製品にアクセスします。
セッション共有ストレージクラスタノードとして3セッション
MCのデータ記憶機構
キャッシュされたデータのそれぞれは、固有の識別キーを有する事前に割り当てられたメモリ領域のサーバ側に格納されたキー/値のキーの形でキャッシュされるデータは、Memcachedのデータ操作は、一意のキーによって識別され行きました。
MCメモリ管理メカニズム
memcachedを使用する次の機構:
1.メモリ割り当てスラブの使用
対象LRUクリアランス機構2.
迅速な検索項目のハッシュ機構を3
memcachedは、事前に、メモリを割り当て、管理するためのスラブ割り当てメカニズムを使用することです大内存分配大小为1MB
が若干个slab
、その後それぞれのために、そしてslab
さらに小对象填充
、この小さなオブジェクトが呼び出されるchunk
ので、初期化とクリーンアップの繰り返しを避け、メモリマネージャの負担を軽減。
Slab Allocation
メモリ割り当ての原理に従って、メモリの所定の大きさであり、Memcachedのに割り当てられたサービスは、以前に特定の長さ(チャンク)のメモリブロックに分割し、同じメモリブロックサイズ(チャンク)をグループに分け(チャンクスラブクラス)、これらのメモリブロックは、再利用することができ、解放されません。
要約:
- malloc関数の早期のメモリ管理機構MC(ダイナミックメモリの割り当て)
- オペレーティングシステムのパフォーマンスの大幅な低下をもたらすのmalloc(動的メモリ割り当て)メモリの断片化、。
- ラボメモリ割り当てメカニズムは、メモリの断片化の問題を解決することができます
- のみチャンクで、特定のメモリブロックの長さに予めmemcachedサーバのメモリと呼ばれるチャンク、キャッシュされたデータのメモリブロックまたはメモリ空間は、ディスクに対応するブロックが、各ディスクブロックが等しいです同じですがスラブクラスに等しいです。
- スラブクラスは、特定のチャンクサイズ(1メガバイト)とMemcachedのスラブクラスを複数備え、複数のセットまたはグループを指し、各チャンクは、複数のスラブクラス同じサイズを含みます。
- スラブ機構も欠点は、例えば、スペースの無駄チャンク(同調因子によって配置MCインスタンスと近いデータのサイズ)が存在することになる有します
MCは、メカニズムを期限切れ
- 対象アイテムの有効期限が切れるかどうかを検出するためのイニシアチブを取ることはありませんが、オブジェクトのアイテムの有効期限が切れるかどうか、および削除時に彼らが得る必要があるかどうかを確認します。
- オブジェクトがアイテムを削除すると、一般的にメモリ空間を放出しないが、タグを削除するには、スロットにポインタを移動させるスロットを回収し、割り当てられた次の時間を直接使用することができます。
- メモリがいっぱいになると、LRUアルゴリズムに従って最低使用項目オブジェクトを削除します。
- 保存されたデータは、有効期限を設定することができますが、有効期限のデータの直後に削除されていませんが、対象アイテムの有効期限が切れるかどうかをチェックし、削除するとき、彼らが得るべきであるかどうか。
- あなたは、システムがLRUアルゴリズムを使用してデータを消去したくない場合は、パラメータが使用-Mかもしれません。
Memcachedの展開
MCのインストール
1.システム環境
[root@cache01 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@cache01 ~]# uname -r
3.10.0-693.el7.x86_64
2. MCがインストール
Memcachedのは比較的簡単ですインストールし、プラットフォームは、Linux、FreeBSDの、Solaris版、WindowsとのMemcachedの共通をサポートしています。
//1.安装libevent及连接Memcached工具nc
cd /server/tools/
yum -y install libevent libevent-devel
//2.编译的方式安装
wget http://www.memcached.org/files/memcached-1.5.12.tar.gz
tar xf memcached-1.5.12.tar.gz
cd memcached-1.5.12/
./configure
make
make install
cd ../
ヒント:yumのインストールmemcachedのバージョンは若干低いですが、コンパイルしてインストールする必要があり以降のバージョンをインストールする場合は、使用には影響しません
yumのmemcachedを-yをインストール
MCの基本的な管理サービス
1.のMemcached
//1.命令行方式启动Memcached
[root@cache01 ~]# memcached -m 16m -p 11211 -d -u root -c 8192 #启动第一个mc实例
//2.检查启动结果
[root@cache01 ~]# ps -ef | grep memcached | grep -v grep
root 2071 1 0 13:52 ? 00:00:00 memcached -m 16m -p 11211 -d -u root -c 8192
2. [スタート]マルチインスタンスmemcachedの
//启动多一个11212端口的MC实例
[root@cache01 ~]# memcached -m 16m -p 11212 -d -u root -c 8192
[root@cache01 ~]# ps -ef | grep memcached | grep -v grep
root 2071 1 0 13:52 ? 00:00:00 memcached -m 16m -p 11211 -d -u root -c 8192
root 2086 1 0 13:53 ? 00:00:00 memcached -m 16m -p 11212 -d -u root -c 8192
スタートからの起動を追加3。
//把上述两个实例的启动命令放入/etc/rc.local,以便下次开机可以自启动。
[root@cache01 ~]# tail -2 /etc/rc.local
memcached -m 16m -p 11211 -d -u root -c 8192
memcached -m 16m -p 11212 -d -u root -c 8192
MCの起動コマンドパラメータ
#进程与连接设置:
-d 以守护进程(daemon)方式运行服务
-u 指定运行Memcached的用户,如果当前用户为root,需要使用此参数指定用户
-l 指定Memcached进程监听的服务器IP地址,可以不设置此参数
-p(小写)指定Memcached服务监听TCP端口号。默认为11211
-P(大写)设置保存Memcached的pid文件($$),保存PID到指定文件
#内存相关设置:
-m 指定Memcached服务可以缓存数据的最大内存,默认为64MB
-M Memcached服务内存不够时禁止LRU,如果内存满了会报错
-n 为key+value——flags分配的最小内存空间,默认为48字节
-f chunk size增长因子,默认为1.25
-L 启用大内存页,可以降低内存浪费,改进性能
#并发连接设置:
-c 最大的并发连接数,默认是1024
-t 线程数,默认4.由于Memcached采用的是NIO,所以太多线程作用不大
-R 每个event最大请求数,默认是20
-C 禁用CAS(可以禁止版本计数,减少开销)
#测试参数:
-v 打印较少的errors/warnings
-vv 打印非常多调试信息和错误输出到控制台
-vvv 打印极多的调试信息和错误输出,也打印内部状态转变
#其他选项可通过在命令行输入“memcached -h”命令来显示。
MC基本操作
> values1、KEY2 - - > values2 KEY1:Memcachedのにデータを追加する場合、ノート・データは、一般に、例えば、キーと値のペアの形で添加されます
1.インストールツール
MCのデータ挿入は、対話型モードを使用することができ、ツールがあるとのtelnet NC
yum instasll nc telnet -y
printf関数によってNC Memcachedのに合わせて2.書き込みデータ
//向memcached写入数据
[root@cache01 ~]# printf "set key1 0 0 6\r\njason\r\n" | nc 127.0.0.1 11211
STORED #出现STORED表示成功添加key1及对应的数据
[root@cache01 ~]# printf "replace key1 0 0 7\r\nxmh\r\n" | nc 127.0.0.1 11211
STORED #replace 更新数据
//如果set命令的字节是6,那么后面就要6个字符(字节)。否则插入数据就会不成功
[root@cache01 ~]# printf "set key1 0 0 4\r\nbenet\r\n" | nc 127.0.0.1 11211
CLIENT_ERROR bad data chunk
ERROR
//通过printf配置nc从Memcached中读取数据
[root@cache01 ~]# printf "get key1\r\n" | nc 127.0.0.1 11211
VALUE key1 0 5
benet #这就是读取到的key1对应额值
//通过printf配合nc从Memcached中删除数据
[root@cache01 ~]# printf "delete key1\r\n" | nc 127.0.0.1 11211
DELETED
[root@cache01 ~]# printf "get key1\r\n" | nc 127.0.0.1 11211
END
データがコマンドのtelnetによって書かれている3。
[root@cache01 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set user01 0 0 7 #写入数据,创建key,长度等
jason12 #数据长度要和value一致
STORED
get user01 #浏览数据
VALUE user01 0 7
jason12
END
delete user01 #删除数据,删除的是key
DELETED
get user01 #再次浏览数据,数据被删除
END
quit #quit退出
Connection closed by foreign host.
Memcachedのコマンドインタプリタ
- セットのデータセット
- ゲットするデータ
- 削除しますデータ
- 更新データを交換します
構文動作はMCに関連するコマンド
以下のオペレーティングMemcachedの関連する基本的なコマンド構文:
set key1 0 0 6 \r\n benet \r\n
<command name><key><flags><exptime><bytes><datablock><string><datablock>
command # 命令参数(set、get、delete、replace)
key # key 用于查找缓存值,要求小于250字符,不包含空格和控制字段
flags # 用户端用来表示数据格式数值,如json、xml、压缩等
exptime # 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes # 在缓存中存储的字节数
datablock # 文本行,以\r\n结尾
string # 键值对应的缓存内容
4.閉じるMC
単一のインスタンスを閉じるのMemcached:
killall memcached或pkill memcached
複数のインスタンスは、Memcachedの、またはkillallをpkillは実施形態を使用すると同時に近いこれらの例でしょう!これは、起動時に固定パラメータを指定-P PIDファイルを大きくすることが好ましい、別のインスタンスを管理することは容易です。
//启动多实例MC指定PID文件
[root@cache01 ~]# memcached -m 16m -p 11211 -d -u root -c 8192 -P /var/run/11211.pid
[root@cache01 ~]# memcached -m 16m -p 11212 -d -u root -c 8192 -P /var/run/11212.pid
[root@cache01 ~]# ps -ef | grep memcached | grep -v grep
root 1486 1 0 11:14 ? 00:00:00 memcached -m 16m -p 11211 -d -u root -c 8192 -P /var/run/11211.pid
root 1493 1 0 11:14 ? 00:00:00 memcached -m 16m -p 11212 -d -u root -c 8192 -P /var/run/11212.pid
//此时,即可通过kill命令指定pid文件,来关闭Memcached
[root@cache01 ~]# kill `cat /var/run/11211.pid`