缓存Memcache(1)
1.Memcache的简介Memcache是国外社区网站 LiveJournal的开发团队开发的 高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。Memcache的优点:纯内存的存储机制,因此它是所有NoSql产品当中最简单也是速度最快内置分布式算法,使得开发者不需要自己去实现它能把单项数...
1.Memcache的简介
Memcache是国外社区网站 LiveJournal的开发团队开发的 高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。
Memcache的优点:
- 纯内存的存储机制,因此它是所有NoSql产品当中最简单也是速度最快
- 内置分布式算法,使得开发者不需要自己去实现
- 它能把单项数据缓存的过期时间设置为30天,也能使得单项数据常驻内存当中
- 完美支持PHP的调用
Memcache的缺点:
1.由于memcache使用telnet协议记性传说,没有数据加密的功能,安全性很差
2.Memcache最大的内存存储空间(吞吐量)只有64M,如果64M的内存一旦爆满,Memcache会指定重启,并释放当前所有的内存。
- 由于Memcache把数据置于内存中,所以服务器进行维护或者重启,那么数据就会丢失
- 数据零散,无法遍历
Memcache的使用注意事项:
- 不要把安全性,敏感性,具有明文性过高的数据放到memcache当中
- 使用数据时候要注意压缩,尽量使用一些小型的数据进行存储(产品分类,文章栏目,用户登录的信息,计数器的结果,用户属性)
Memcache的存储格式:key=>value(键值对的存储方式)
Memcache在国内职场中的使用场景:
2.PHP + Memcache + MySql的架构图:
当前方式是客户端(用户浏览器)发起请求,这时这种架构的请求方式,我们称为非实时请求,那么每一次的请求必须通过中间的缓存层面进行,如果缓存中有数据,那么数据库就不会做出任何的响应,如果没有缓存的数据,数据库只会响应一次,并把响应的结果放到内存中等待用户下一次的请求。
- Memcache的安装
1.安装包介绍
memcached:这个表示memcache的rpm软件包,用于实现memcache服务器安装
telnet:这个表示telnet客户端的rpm软件包,这个包的安装用于实现客户端连接memcache服务器
telnet-server:这个表示telnet的服务器端rpm软件包,这个包的安装用于实现telnet客户端的启动
- 安装说明
安装memcache这3个包必须一起安装,而不能分开安装,否则他们依赖关系你需要自己解决
- 使用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代表字节的大小
- add命令
这个命令就是像memcache的内存当中的某一个值添加数据,然而它在现实开发当中很少用,一般我们会用set直接取代它的操作,所以这个命令你只需要了解就可以了,
其命令格式:add 键名 标识符 过期时间 字节的大小
说明:
标识符:一般只会填入1
过期时间:0代表永远不过期,其余请求就是以秒作为单位,如:设为30,代表30秒后过期
字节大小:就是打算添加的数据有多大,如:设为3,代表输入3个字节
add name 1 0 3 : 代表输了一个名为name的键名,3个字节的大小,永远不过期
php : 代表name键名中的值为php
STORED : 代表成功写入name键名中
- set命令
这个命令在开发当中使用的频率是100%,它作用很特别,如果一个键名已经存在那么set命令会修改该键名的值,如果该键名不存在那么set会创建这个键名的值,所以set既可以添加也可以修改,因此add就意义不大,因为add只能添加而不能够修改。
其命令格式: set 键名 标识符 过期时间 字节的大小
说明:
标识符:一般只会填入1
过期时间:0代表永远不过期,其余请求就是以秒作为单位,如:设为30,代表30秒后过期
字节大小:就是打算添加的数据有多大,如:设为3,代表输入3个字节
命令的运行效果如下图所示:
- 用set修改一个已经存在的键名,如:name
set name 1 0 3 : 修改一个已经存在的键名为3个字节并且永远不过期
jim : 修改name中的值
STORED : 代表写入成功
- 用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,效果如下图示所示:
- 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类还需要多学习一个单服务器的连接方法。
- 安装memcache和memcached两个扩展
由于现实的开发当中,有一些程序员他们喜欢用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的扩展模块
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)