私はあなたを助けるためにmemcacheサービスを構築したいと思っています


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:サーバーでテストする

マーク
これでこの記事は終わりです。ご覧いただきありがとうございます。

おすすめ

転載: blog.csdn.net/weixin_47151643/article/details/108802137