目录简介:

1· Memcached 功能
2· Memcached 特征
3· Memcached 储存方式
4· 实战部署 与 Memcached 连接
5· 文章总结


Memcached 介绍


1)Memcached 是什么?

1· memcached是一套分布式的快取系统,与redis相似,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权协议发布。


2·memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后


3·memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。


4·Memcached 的守护进程(daemon )是用C语言写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。


2)Memcached 的特征:

memcached作为高速运行的分布式缓存服务器,具有以下的特点:

  • > · 协议简单
  • > · 基于libevent的事件处理
  • > · 内置内存存储方式
  • > · memcached不互相通信的分布式

3)Memcached 存储方式 :

为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。


4)请求拓扑图:

【提供源码包】高性能存储对象缓存 之【Memcached】_第1张图片


5)Memcached 分布式:

(1)Memcached 分布式主要依赖 Memcached 的客户端来实现,多个Memcached 客户端服务器是独立的。分布式数据怎么杨来存储是由路由算法决定。


(2)当数据到达客户端程序库时,客户端的算法就依据路由算法来决定保存的 Memcached 服务器。读取数据时,客户端依据保存数据的路由算法选择和储存数据时相同的服务器来读取数据。


(3)下图是分布Memcached 分布式:

【提供源码包】高性能存储对象缓存 之【Memcached】_第2张图片


实战部署:

1)实战部署说明:

1·需要两台 CenOS 7.4 (也可以是其他版本),需要源码包:libevent-2.1.8、memcached-1.5.6。


2·客户端需要:安装 LAMP 架构和源码包:memcache-2.2.7


3· 源码包提供(包括LAMP所有的包):此文章所需的源码包,请点击下载,密码:dqth


2)案例环境:

本案例使用两台 CenOS 7.4 系统完成,一台是 Memcached 服务器,另一台是基于 LAMP 架构进行 Memcached 扩展的 Memcached API 客户端,可以根据生产环境需求进行架构调整。

操作系统 IP地址 所需源码包 角色
CenOS 7.4 192.168.106.129 LAMP、memcache-2.2.7.tgz Memcached API 客户端
CenOS 7.4 192.168.106.133 libevent-2.1.8-stable.tar.gz 、 memcached-1.5.6.tar.gz Memcached 服务端







3)安装 Memcached 服务器
(1)安装 Libevent ,它是一款跨平台的时间处理接口的封装,可以兼容多个操作系统的时间访问。Memcached 的安装依赖于 Libevent ,所以需要先安装它,源码包在文章前已经提供,需要的点击下载

[root@localhost ~]# tar xvf libevent-2.1.8-stable.tar.gz -C /opt/ ----(解压到 /opt 目录下,只是个人习惯!


[root@localhost ~]# cd /opt/libevent-2.1.8-stable/


[root@localhost libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent ---(指定安装路径


[root@localhost libevent-2.1.8-stable]# make && make install ---(开始制作,编译


就这么简单,Libevent 安装完毕,下面需要开始 安装 Memcached。


(2)安装 Memcached
采用源码的方式进行 Memcached 的编译安装,安装时需要指定 Libevent 的安装路径

[root@localhost ~]# tar xvf memcached-1.5.6.tar.gz -C /opt/ ---(解压 软件包
[root@localhost ~]# cd /opt/memcached-1.5.6/


[root@localhost memcached-1.5.6]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent ---(这里安装需要注意的是,需要指定 Libevent 的安装路径,因为 Memcached 需要依赖它
[root@localhost memcached-1.5.6]# make && make install ---(开始制作编译


(3)Memcached 优化与启动

[root@localhost memcached-1.5.6]# ln -s /usr/local/memcached/bin/* /usr/local/bin/ ---(建立软连接,方便使用它的命令


[root@localhost memcached-1.5.6]# memcached -d -m 32m -p 11211 -u root ---(启动 memcached
参数说明:-d:守护进程、-m:指定缓存大小为32M 、-p:指定默认端口11211 、 -u:指定 登陆用户为 root


查看一下启动情况:
[root@localhost memcached-1.5.6]# netstat -antp | grep memcached


关闭防火墙、SE功能
[root@localhost memcached-1.5.6]# systemctl stop firewalld.service
[root@localhost memcached-1.5.6]# setenforce 0


(4)Memcached 连接

需要安装 telnet 软件
[root@localhost ~]# yum install telnet -y


开始连接 本地memcached 11211端口:
[root@localhost ~]# telnet 127.0.0.1 11211


Memcached 基本操作:

//第一个0:不设置序列号,第二个0:无过期时间,第3个值是,字符长度
add username 0 0 7  

//查看username这个值的有效长度
get username

//查看username 这个值的有效长度和更新因子
gets username

//更新username这个值,有这个值则更新,无则创建
set username 0 0 8

//更新username,但是这个username必须存在
replace username 0 0 6

//检查更新,更新因子必须和查询的因子一样才能更新
cas username 0 0 7 4

//在原有的值后面追加
append username 0 0 7

//在原有的值前面追加
prepend username 0 0 2

//删除username
delete username

//清除所有缓存数据
flush_all

//显示状态信息
stats

//退出 
quit

到此 Memcached 服务端 安装完毕,下面就需要开始安装 Memcached API 客户端


4)安装 Memcached API 客户端

(1) 安装 LAMP 架构的教程请访问:LAMP 安装教程 ----(客户端必须要安装 LAMP 架构


LAMP 架构安装完毕后,测试 MySQL 数据库。
[root@localhost ~]# mysql -u root -p 123123
create database a
grant all on a.* to 'auser'@'%' identified by '123123';
flush privileges;

编写代码,用网页测试数据库:
[root@localhost ~]# vim /usr/local/httpd/htdocs/index.php
Success!!";
else echo "Fail!!";
mysql_close();
?>

【提供源码包】高性能存储对象缓存 之【Memcached】_第3张图片


开始访问网页:http://192.168.106.129/index.php
显示:Success!! 则说明,LAMP 中MySQL搭建成功。如下图:
【提供源码包】高性能存储对象缓存 之【Memcached】_第4张图片


LAMP 到此也搭建完成,下面需要安装 Memcached 客户端软件


(2)开始安装 Memcached 客户端

[root@localhost ~]# yum install autoconf -y
[root@localhost ~]# tar xvf memcache-2.2.7.tgz -C /opt ---(解压软件包)
[root@localhost ~]# cd /opt/memcache-2.2.7


**这里需要注意的是:memcache-2.2.7.tgz 源码包中默认是没有 configure 配置脚本,需要使用 PHP 的 phpize 脚本生成配置脚本 ,否则没办法 ./configure**

[root@localhost memcache-2.2.7]# /usr/local/php5/bin/phpize


Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226

-----
![](https://s1.51cto.com/images/blog/201809/24/456fb2a1bc2b7f3487705c7ef15eb55c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

-----
> [root@localhost memcache-2.2.7]# ./configure --enable-memcache --with-php-config=/usr/local/php5/bin/php-config

-----
> [root@localhost memcache-2.2.7]# make && make install ----(开始编译)

-----

记录以下这段路径,在PHP主配置文件需要用到:
/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/


-----
(3)配置 PHP 添加 Memcached 组件
> 编辑PHP配置文件 php.ini ,添加 Memcached组件,如果没有配置文件,我们拷贝一份模板
> [root@localhost ~]# cd /opt/php-5.6.11/
> [root@localhost php-5.6.11]# cp php.ini-development /usr/local/php5/php.ini
> [root@localhost ~]# vim /usr/local/php5/php.ini

-----

编辑内容如下:
extension_dir="/usr/local/php5/lib/php/extensions/no-debug-zts-20131226" ---(这个路径就是,之前记录下的路)
extension=memcache.so


-----
(4)测试 Memcached API 功能
> 通过编写简单的PHP 测试代码调用 Memcache 程序接口,来测试是否与 Memcached 服务器协同工作,代码如下:
> [root@localhost ~]# vim /usr/local/httpd/htdocs/index.php

-----

$memcache = new Memcache();
$memcache->connect('192.168.106.133',11211);
$memcache->set('key','Memcache test Successfull!',0,60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>



-----
> **此段代码的作用是在客户端连接 memcached 服务器,设置名为 “key”的键的值为Memcache test Successfull ,并读取显示。显示成功,则表示服务器与客户端协同工作正常,下图是用浏览器访问结果:**
![](https://s1.51cto.com/images/blog/201809/24/667385df002b614c62288b959a9284b3.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

-----
**高性能内存对象缓存 Memcached 搭建成功!!!**

-----
文章总结:
1· Memcached 是分布式内存对象缓存系统,因为所有数据都存储在内存中,从而用于网站加速。
2· Memcached 分布式实现不是在服务端实现而是在客户端实现的。
3· Memcached 支持任意存储类型的数据。