搭建memcache服务希望对你有所帮助


Memcache

Memcache的作用网上资料都讲的很好,说简单点就是减轻读取数据库的压力,原理也很简单:

被请求的数据会先到memcache里去取,如果没有就去数据库里取,顺便给memcache带一份。

每次更新数据也先更新memcache里的数据,如果没有则更新数据库,同时更新memcache。

因此需要注意的是这个数据是易失去性存储的。

一、Memcache概述

Memcache是一套自由、开源、高性能、分布式的高速缓存系统。由于Memcache通过在内存中缓存数据和对象来减少读取数据库的次数。目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。

Memcache是一个存储键值对的HashMap,在内存中对任意的数据都可以使用key-value的方式存储,数据库可以来自数据库调用或API调用。Memcache设计理念就是小而强大,她简单的设计促进了快速部署、易于开发并解决大规模的数据缓存的许多难题,而其所开放的API使得Memcache能用于Java、C/C++/C#、Perl、Python等大部分流行的程序语言。

二、Memcache工作流程

注意Memcache虽然被称为“分布式缓存”,但是Memcache本身完全不具备分布式的功能,Memcache集群之间不会相互通信,所谓的“分布式”,完全依赖于客户端程序来实现,如图:

mark

Memcahe工作流程: (1)应用程序输入需要写入缓存的数据;
(2)API将Key输入路由算法模块,理由算法根据Key和Memcache集群服务器列表得到服务器的编号;
(3)由服务器编号得到Memcache及其IP地址和端口号;
(4)API调用通信模块和指定编号的服务器通信,讲数据写入该服务器,完成一次分布式缓存的写操作;

扫描二维码关注公众号,回复: 11837064 查看本文章

不管是读取缓存还是写入缓存,只要使用相同的路由算法和服务器列表、应用程序查询的是相同的key,Memcache客户端总是访问相同的客户端去读取数据,只要服务器缓存中还有该数据的缓存,就能保证缓存命中。

这种Memcache集群的方式也是从分区容错性的方面考虑的,假设Node2宕机了,那么Node2上存储的数据都不可用了,此时由于集群中Node0和Node2还存在,下一次请求获取Node2的缓存数据,肯定是没有命中的。这时首先会从数据库中获取到缓存的数据,通过路由算法根据将缓存的数据存储在Node0或Node1上,这种集群的做法很好,但是缺点是成本太大。

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 显示帮助

三:搭建Memcache

Memcache 的安装分为两个过程:memcache 服务器端的安装和 memcached 客户端的安装。所谓服务器端的安装就是在服务器(一般都是 linux 系统)上安装 Memcache 实现数据的存储。

所谓客户端的安装就是指 php(或者其他程序,Memcache 还有其他不错的 api 接口提供)去使用服务器端的 Memcache 提供的函数,需要 php 添加扩展。

由此可以看出Memcache的搭建需要借助于LAMP或LNMP,本篇博文采用LAMP结构。

实验环境

一台centos 7作为服务器 20.0.0.41

一台centos 7作为客户端 20.0.0.42

实验目的

  • 搭建memcache服务端和客户端,通过访问客户端来确定服务端的连接是否正常
  • 工作原理是:
  • Memcached有两个核心组件组成:服务器端(server)和客户端(client)。
  • 在一个memcached的查询中,client先通过计算key的hash值来确定kv对所处在的server位置。
  • 当server确定后,客户端就会发送一个查询请求给对应的server,让它来查找确切的数据。
  • 因为这之间没有交互以及多播协议,所以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.

四:搭建memcache客户端

  • 搭建LAMP

这边我们就不一一例举了可以查看我之前的博客:部署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:服务端进行测试

mark
本文到此结束,感谢观看

猜你喜欢

转载自blog.csdn.net/weixin_47151643/article/details/108802137
今日推荐