1.Memcache的简介

Memcache是国外社区网站 LiveJournal的开发团队开发的 高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。

Memcache的优点:

  1. 纯内存的存储机制,因此它是所有NoSql产品当中最简单也是速度最快
  2. 内置分布式算法,使得开发者不需要自己去实现
  3. 它能把单项数据缓存的过期时间设置为30天,也能使得单项数据常驻内存当中
  4. 完美支持PHP的调用

Memcache的缺点:

1.由于memcache使用telnet协议记性传说,没有数据加密的功能,安全性很差

2.Memcache最大的内存存储空间(吞吐量)只有64M,如果64M的内存一旦爆满,Memcache会指定重启,并释放当前所有的内存。

  1. 由于Memcache把数据置于内存中,所以服务器进行维护或者重启,那么数据就会丢失
  2. 数据零散,无法遍历

Memcache的使用注意事项:

  1. 不要把安全性,敏感性,具有明文性过高的数据放到memcache当中
  2. 使用数据时候要注意压缩,尽量使用一些小型的数据进行存储(产品分类,文章栏目,用户登录的信息,计数器的结果,用户属性)

 

Memcache的存储格式:key=>value(键值对的存储方式)

 

Memcache在国内职场中的使用场景:

           

2.PHP + Memcache + MySql的架构图:

当前方式是客户端(用户浏览器)发起请求,这时这种架构的请求方式,我们称为非实时请求,那么每一次的请求必须通过中间的缓存层面进行,如果缓存中有数据,那么数据库就不会做出任何的响应,如果没有缓存的数据,数据库只会响应一次,并把响应的结果放到内存中等待用户下一次的请求。

  • Memcache的安装

1.安装包介绍

memcached:这个表示memcache的rpm软件包,用于实现memcache服务器安装

 

telnet:这个表示telnet客户端的rpm软件包,这个包的安装用于实现客户端连接memcache服务器

 

telnet-server:这个表示telnet的服务器端rpm软件包,这个包的安装用于实现telnet客户端的启动

 

  1. 安装说明

安装memcache这3个包必须一起安装,而不能分开安装,否则他们依赖关系你需要自己解决

  1. 使用yum进行memcache的安装

安装的命令: yum -y install memcached telnet telnet-server

使用(putty)执行命令安装过程如下:

第一步:先打开putty输入当前linux服务器的ip地址

第二步:在putty中输入用户名和密码进行Linux服务器的登录

第三步:登录完成后输入yum -y install memcached telnet telnet-server

注意:putty操作memcache特别的好用,但是不是代表只能使用putty执行以上的安装命令,你也可以使用xshll或者其他工具执行这个命令,然而xshell操作memcache不太好使。

四.启动Memcache的服务器

注意事项:如果希望启动memcache服务器,那么必须要确保笔记中第三大步安装完成,如果没有安装则无法启动memcache服务器。

 

在memcache服务器中,如果希望能正常的启动memcache,并且可以在客户端正常的连接memcache服务器,那么需要启动memcached和xinetd的服务器。

 

memcached的说明:memcached是memcache服务器的守护进程,负责memcache服务器的启动,重启,关闭和状态的监控。其管理命令如下:

service memcached start #启动memcache服务器

service memcached restart #重启memcache服务器

service memcached stop #停止memcache服务器

service memceched status #查看守护进程的状态

memcache服务器命令的注意事项:如果重启或者停止memcache服务器,那么在memcache中存储的数据就会马上丢失,无法恢复。

 

xinetd的说明: xinetd是telnet服务器的守护进程,负责telnet客户端可以正常连接memcache服务器,默认的情况下占据11211端口

service xinetd start #启动telnet服务器

service xinetd restart #重启telnet服务器

service xinetd stop #停止telnet服务器

service xinetd status #查看守护进程的状态

xinetd服务器命令的注意事项:如果重启或者停止,并不会导致memcache的数据丢失,但客户端会无法连接memcache服务器。所以如果想维护memcache服务器,那么可以停止telnet服务器

 

 

  • 使用telnet连接Memcache

首先要清楚的知道,telnet和memcached一定要处于启动的状态,并且要知道当前的默认端口为11211,如果不清楚可以看笔记的第四大步

 

第一步:如果没有启动xinetd和memcache需要启动,命令如下;

service memcached start

service xinetd start

第二步:使用telnet客户端进行memcache服务器的连接,如果希望启动连接,建议使用putty

连接命令: telnet memcache的服务器地址(本地是localhost) 端口号(11211)

注意事项:如果刚打开telnet客户端敲入回车键,那么会出现ERROR,这时并不是代表连接失败,而是因为memcache服务器在等待您输入正确的指令,而回车键并不是一个正确的指令,所以它会报出ERROR的错误

  • Memcache的get,add,set,delete命令

1.get命令

这个命令用于获取memcache内存中的数据,命令格式: get 键名(key名称)

比如说:如果希望获取一个为name的键名,可以使用命令: get name

get name : 代表获取键名为name的值

VALUE name 1 3 : 代表name的键名的值的说明,其中1代表标识符,3代表字节的大小

  1. add命令

这个命令就是像memcache的内存当中的某一个值添加数据,然而它在现实开发当中很少用,一般我们会用set直接取代它的操作,所以这个命令你只需要了解就可以了,

其命令格式:add 键名 标识符 过期时间 字节的大小

说明:

标识符:一般只会填入1

过期时间:0代表永远不过期,其余请求就是以秒作为单位,如:设为30,代表30秒后过期

字节大小:就是打算添加的数据有多大,如:设为3,代表输入3个字节

add name 1 0 3 : 代表输了一个名为name的键名,3个字节的大小,永远不过期

php : 代表name键名中的值为php

STORED : 代表成功写入name键名中

  1. set命令

这个命令在开发当中使用的频率是100%,它作用很特别,如果一个键名已经存在那么set命令会修改该键名的值,如果该键名不存在那么set会创建这个键名的值,所以set既可以添加也可以修改,因此add就意义不大,因为add只能添加而不能够修改。

其命令格式: set 键名 标识符 过期时间 字节的大小

说明:

标识符:一般只会填入1

过期时间:0代表永远不过期,其余请求就是以秒作为单位,如:设为30,代表30秒后过期

字节大小:就是打算添加的数据有多大,如:设为3,代表输入3个字节

命令的运行效果如下图所示:

  1. 用set修改一个已经存在的键名,如:name

set name 1 0 3 : 修改一个已经存在的键名为3个字节并且永远不过期

jim : 修改name中的值

STORED  : 代表写入成功

  1. 用set添加一个不存在的键名,如:project

set name 1 0 4 : 添加一个已经存在的键名为4个字节并且永远不过期

java : 添加project中的值

STORED  : 代表写入成功

.delete命令

这个命令就是删除 memcache在内存中的键

其命令格式:delete 键名(可以存在也可以不存在)

命令的运行效果如下:

5.过期时间

memcache的过期时间一般用于add命令和set命令当中,过期时间以秒作为单位,0表示永远不过期,永远不过期的数据会永远占据着内存的空间,直到删除键名或者memcache重启时才会被释放,因此设置一个永远不过期的键名需要深思熟虑。使用过期时间的设置,可以有效的节省内存的空间。

一般设置过期时间,虽然理论上也可以使用add命令,然而由于set命令具备add命令的功能,且set命令本身具备修改的功能,因此我们在设置过期时间时,使用set命令的几率是最高的。

其命令格式: set 键名 标识符 过期时间 字节的大小

其实这个命令关键点就是过期时间的参数不能设置为0和小数点,必须为正整数

 

比如说:把一个为project2的键名的值设置为20秒内过期,可以使用以下方式:

set project2 1 20 3,效果如下图示所示:

  1. set和add的注意事项

在memcache当中,memcache默认的最大存储内存空间为64M,而memcache对单个键名的存储的空间最大为1M,所以设置键名的时候,要合理的分配字节的大小,然后memcache分配字节大小是非常严格的,比如说,你分配了一个为3个字节大小的键名,如果你使用的时候超过3个字节或者不足3个字节那么memcache就会报错。

1.设置一个为project3,字节大小为3,永远不过期的键名,其值为java(超过3个字节),这时由于java的值是4个字节,超过了3个字节的存储空间,这时memcache就会报错,

2.设置一个为project4,字节大小为3,永远不过期的键名,其值为aa(小于3个字节),这时由于ab的值是2个字节,小于了3个字节的存储空间,实际上memcache就会报错,然而您必须输入回车键才能看到错误的提示

七.在PHP中安装Memcache的扩展

1.memcache类和memcached类的区别

memcache这个类库是php官方开发,他们把这个类叫做pecl类库中的memcache类,专门是用来做memcache的操作的,支持分布式的存储,支持单服务器的存储,而且该类兼容php5.1 - php5.6的版本,addServer方法在memcache类当中,php5.6不支持。

 

memcached这个类库是libmemcache组织用C语言开发出来的类库集成到memcache当中的,由于memcache在php5.3的时候加入libmemcache这个类,因此php官方把该类的名字修改为memcached,memcached这个类库的功能和方法跟memcache类的功能很方法是一模一样的,然而这个memcached的类库只支持分布式的存储,不支持单服务器的存储,而且它建议使用的版本在php5.3以上,支持php7

因此,人们比较习惯使用memcache这个类。所以我们学习的时候就按memcache这个类学习就可以了,因为他们方法和功能是一样,而memcache类还需要多学习一个单服务器的连接方法。

  1. 安装memcachememcached两个扩展

由于现实的开发当中,有一些程序员他们喜欢用memcache这个类,有一些程序员喜欢用memcached这个类,所以如果让您去做运维的工作,那么您就可以同时安装这两个类,省得php程序开发人员来找你的麻烦,如果当前是php5.6那么我们还需要用到memcached的addServer方法来做分布式服务器的连接,安装的命令如下:

yum install -y --enablerepo=remi --enablerepo=remi-php56 libmemcached php-pecl-memcache php-pecl-memcached

安装的过程如下:

第一步:需要先找到apache的网站目录,路径如下:/var/www/html   然后切换到该工作目录当中

第二步:在apache的网站目录下,使用命令:vim phpinfo.php编辑一个名为phpinfo.php的文件

第三步:在/var/www/html/phpinfo.php的文件中键入 <?php   phpinfo();

第四步:在浏览器端运行phpinfo.php  查看是否安装成功了

第五步:在putty或者xshell当中键入以下命令,进行memcache的php扩展安装,命令如下所示:

yum install -y --enablerepo=remi --enablerepo=remi-php56 libmemcached php-pecl-memcache php-pecl-memcached

第六步:安装完成后,必须重启apache服务器,重启的命令:service httpd restart

第七步:重启apache服务器完成后,需要重新在浏览器端访问phpinfo.php这个文件查看是否已经存在memcache和memcached的扩展模块

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐