記事ディレクトリ
Memcache
Memcacheの役割は、インターネット上で非常に優れています。簡単なポイントは、データベースを読み取るプレッシャーを軽減することです。原則も非常に簡単です。
要求されたデータは最初にmemcacheからフェッチされます。そうでない場合は、データベースからフェッチして、コピーをmemcacheに持ってきます。
データが更新されるたびに、memcache内のデータも最初に更新されます。そうでない場合は、データベースが更新され、同時にmemcacheも更新されます。
したがって、このデータは簡単に保存できることに注意してください。
1つは、Memcacheの概要です
Memcacheは、無料のオープンソースの高性能分散型高速キャッシュシステムです。Memcacheは、データとオブジェクトをメモリにキャッシュすることにより、データベースを読み取る回数を減らすためです。現在、多くのWebサイトで、特にデータベースへの頻繁なアクセスを必要とする一部の大規模なWebサイトで、Webサイトのアクセス速度を向上させるために使用されています。
Memcacheは、キーと値のペアを格納するHashMapです。メモリ内の任意のデータをキーと値の方法で格納できます。データベースは、データベース呼び出しまたはAPI呼び出しから取得できます。Memcacheの設計コンセプトは小さくて強力です。彼女のシンプルな設計は、迅速な展開と簡単な開発を促進し、大規模なデータキャッシングの多くの問題を解決します。そのオープンAPIにより、MemcacheをJava、C / C ++ / C#、Perlで使用できます。 、Pythonおよび最も人気のあるプログラミング言語。
2、Memcacheワークフロー
Memcacheは「分散キャッシュ」と呼ばれますが、Memcache自体には分散機能がまったくありません。Memcacheクラスターは相互に通信しません。いわゆる「分散」は、図に示すように、クライアントプログラムに完全に依存します。 :
Memcaheワークフロー:(1)アプリケーションはキャッシュに書き込む必要のあるデータを入力します;
(2)APIはルーティングアルゴリズムモジュールにキーを入力し、理由アルゴリズムはキーとMemcacheクラスターサーバーリストに従ってサーバー番号を取得します;
(3)Memcacheはサーバー番号から取得されますそして、そのIPアドレスとポート番号。
(4)APIは、通信モジュールを呼び出して、指定された番号でサーバーと通信し、サーバーにデータを書き込み、分散キャッシュ書き込み操作を完了します。
キャッシュの読み取りか書き込みかに関係なく、同じルーティングアルゴリズムとサーバーリストが使用され、アプリケーションが同じキーを照会する限り、Memcacheクライアントは、サーバーキャッシュにまだ存在する限り、常に同じクライアントにアクセスしてデータを読み取ります。データのキャッシュは、キャッシュヒットを保証できます。
このMemcacheクラスター方式は、パーティションの耐障害性の観点からも考慮されます。Node2がダウンしていると仮定すると、Node2に格納されているデータは利用できません。現時点では、Node0とNode2がクラスター内に存在するため、次の要求はNode2の取得です。キャッシュされたデータ。ヒットがあってはなりません。このとき、キャッシュデータはまずデータベースから取得し、ルーティングアルゴリズムに従ってノード0またはノード1に格納します。このようなクラスタリングは非常に優れていますが、コストが高すぎるというデメリットがあります。
2.1:Mencacheの基本設定
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
3:Memcacheを構築する
Memcacheのインストールは、memcacheサーバーのインストールとmemcachedクライアントのインストールの2つのプロセスに分けられます。いわゆるサーバー側のインストールは、データを格納するためにサーバー(通常はLinuxシステム)にMemcacheをインストールすることです。
いわゆるクライアント側のインストールは、サーバー側のMemcacheによって提供される機能を使用するためにphp(または他のプログラム、Memcacheおよび他の優れたapiインターフェイス)を参照し、PHPは拡張機能を追加する必要があります。
Memcacheの確立にはLAMPまたはLNMPの助けが必要であり、このブログ投稿ではLAMP構造を使用していることがわかります。
ラボ環境
サーバーとしてのcentos7 20.0.0.41
クライアントとしてのcentos7 20.0.0.42
目的
- memcacheサーバーとクライアントをセットアップし、クライアントにアクセスしてサーバー接続が正常かどうかを確認します
- 動作原理は次のとおりです。
- Memcachedには、サーバーとクライアントの2つのコアコンポーネントがあります。
- memcachedクエリでは、クライアントは最初にキーのハッシュ値を計算することによってkvペアのサーバーの場所を決定します。
- サーバーが決定されると、クライアントは対応するサーバーにクエリ要求を送信して、正確なデータを見つけます。
- これらの間に相互作用とマルチキャストプロトコルがないため、ネットワークに対するmemcached相互作用の影響は最小限に抑えられます。
3.1:memcacheサーバーを構築する
[root@mencache ~]# ls
anaconda-ks.cfg 公共 文档
initial-setup-ks.cfg 模板 下载
libevent-2.1.8-stable.tar.gz 视频 音乐
memcached-1.5.6.tar.gz 图片 桌面
//解压事件包
[root@mencache ~]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt
//解压源码包
[root@mencache ~]# tar zxvf memcached-1.5.6.tar.gz -C /opt
//查看opt目录
[root@mencache ~]# cd /opt
[root@mencache opt]# ls
libevent-2.1.8-stable memca:ched-1.5.6 rh
3.2:memcacheとイベントライブラリをコンパイルしてインストールします
//安装编译器
[root@mencache opt]# yum install gcc gcc-c++ make -y
[root@server libevent-2.1.8-stable]# cd libevent-2.1.8-stable/
[root@server libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent //指定libevent目录
//编译及安装
[root@server libevent-2.1.8-stable]# make && make install
//memcache依赖于libevent
//进入memcache目录
[root@server libevent-2.1.8-stable]# cd ../memcached-1.5.6/
[root@server memcached-1.5.6]# ./configure \
> --prefix=/usr/local/memcached \ '//指定memcache路径
> --with-libevent=/usr/local/libevent '//关联libevent事件库'
[root@server memcached-1.5.6]# make && make install
//建立memcache命令软连接
[root@mencache memcached-1.5.6]# ln -s /usr/local/memcached/bin/* /usr/local/bin/
//-u:守护进程 -m:缓存大小32M -p端口为11211 -u指定用户
[root@mencache memcached-1.5.6]# memcached -d -m 32m -p 11211 -u root
//检查是否开启成功
[root@mencache memcached-1.5.6]# netstat -ntap |grep memcache
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 33866/memcached
tcp6 0 0 :::11211 :::* LISTEN 33866/memcached
//关闭防火墙
[root@mencache memcached-1.5.6]# systemctl stop firewalld.service
[root@mencache :memcached-1.5.6]# setenforce 0
3.3:memcacheテスト[データ操作]
//安装telnet软件 否则没有连接
[root@mencache memcached-1.5.6]# yum install telnet -y
//进行链接
[root@mencache memcached-1.5.6]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character i:s '^]'.
3.4:memcacheデータベースの基本操作
//“set”表示按照相应的<key>存储该数据,没有的时候增加,有的覆盖。
//“add”表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败。
//“replace”表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败
//cas,检查更新,更新因子需要相等,
//append,键值后追加数据
//prepend,键值前追加数据
//delete,删除
//flush_all,清楚所有缓存数据
Escape character is '^]'.
add shuai 0 0 7 //0:不使用序列号 0:用过期 5:指定字节长度
1234567 //上面设置字节长度为6 不为6 就会报错
STORED
get shuai //查看
VALUE username 0 7
123456
gets shuai //查看
VALUE shuai 0 7 2 //更新因子 每次更新+1
1234567
END
set shuai 0 0 8 //更新数据,若键名不存在,则自行添加
12345678
STORED
gets shuai //查看
VALUE shuai 0 8 3 //更新因子已经更新+1
12345678
END
replace niu 0 0 2 //更新的键名与键值要存在 set:以存在的数值进行替换 没有数值直接添加【相当于add添加】
12
NOT_STORED //可以看到添加不上
replace shuai 0 0 9 //更新shuai键值
123456789
STORED
gets shuai //查看
VALUE shuai 0 9 4 //更新因子已经+1 shuai:键值 9:长度 123456789:值
123456789
END
cas shuai 0 0 8 4 //检查更新,更新因子相等则更新返回EXISTS
78945612
STORED
get shuai
VALUE shuai 0 8 //更新因子已经更新到8
78945612
cas shuai 0 0 8 2 //如果不指定更新因子就会出错
78945612
EXISTS
append shuai 0 0 4 //键值后面增加数据
book
STORED
get shuai //可以看到boot已经添加成功
VALUE shuai 0 12
78945612book
END
prepend shuai 0 0 2 //键值前面增加数据
un
STORED
get shuai //添加成功
VALUE shuai 0 14
un78945612book
END
delete shuai //删除shuai
DELETED
quit
Connection closed by foreign host.
4:memcacheクライアントを構築する
- ランプを構築する
ここでは、それらを1つずつリストしません。以前のブログ「LAMPアーキテクチャの展開」を確認できます。
4.1:memcacheクライアントを構築する
[root@localhost ~]# tar zxvf memcache-2.2.7.tgz -C /opt
//增加为PHP的模块后在对memcache进行配置
[root@localhost memcache-2.2.7]# /usr/local/php5/bin/phpize
Zend Extension Api No: 220131226
[root@localhost memcache-2.2.7]# ./configure \
--enbale-memcache \
--with-php-config=/usr/local/php5/bin/php-config
//
[root@localhost memcache-2.2.7]# ./configure \
--enable-memcache \ //开启memcache
--with-php-config=/usr/local/php5/bin/php-config //关联php配置文件
//编译
[root@localhost memcache-2.2.7]# make && make install
//共享文件
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-zts-20131226/
vim /usr/local/php5/php.ini //搜索并修改下面一行,在新增一行
//搜索extension——dir
; extension_dir = "ext"
//下面添加
extension_dir="/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/"
extension=memcache.so //指向memcache模块
....省略信息........
4.2:サーバーをテストする
- クライアントを使用して、サーバーが正常に接続されているかどうかを検出します
<?php
$memcache = new Memcache();
$memcache->connect('20.0.0.41',11211); //指定memcache服务器地址
$memcache->set('key','Memcache test Successfull!',0,60);
$result = $memcache->get('key');
unset($memcache);
echo$result;
?>
//重启服务
[root@localhost memcache-2.2.7]# service httpd stop
[root@localhost memcache-2.2.7]# service httpd start
4.3:サーバーでテストする
これでこの記事は終わりです。ご覧いただきありがとうございます。