在大部分的PHP的网站开发当中,咱们每每采用的数据存储方式是php+mysql,所以就会产生以下图所示的请求方式:php
以上的架构对通常对于访问量不大的网站没有任何问题,例如:我的博客网站,小公司的企业网站。然而当网站的数据量和访问量增大以后,即便您的MySql数据库作了很是完美的优化手段,这个架构的请求方式是不会有任何改变的。也就是说,该架构全部的读写操做都是实时发生的,就算你设定了读写分离其实也是把这一切的工做依然是实时的,所有由MySql数据库来承受。因此这种请求方式的架构是有瓶颈的,虽说理论上你还能够部署更多的数据库读写分离来减轻压力,就算是实时的请求也能扛得过去,但依然存在一个问题,更多的数据库部署意味要添加更多的服务器,这个成本实际上是很高的,因此网站优化的另一个思惟就是在当前服务器中减轻数据库的压力,减轻访问(链接)的次数,而并非不断经过添加服务器来解决。html
1.增长服务器,设置读写分离(主从复制)。java
2.增长cpu,高速的IO读写硬盘等硬件和网络带宽。mysql
3.在MySql层面作各项优化,如:索引优化,分表等linux
4.使用反向代理和负载均衡技术(Nginx,H3C,F5)面试
5.聘请可靠的开发技术团队和优秀的运维团队
6.使用NoSql做为缓存中间层redis
NoSQL ,(Not Only SQL),泛指非关系型数据库, 它是由一次叫“反Sql运动”的社区讨论而诞生的体系。这个运动的发起最先源自于社区网站 LiveJournal的开发团队,它们的初衷是为了用于减小数据库链接数,减轻数据库的工做压力,但发展至今有着其余不一样的应用领域,所以NoSQL处于一种所谓百家争鸣的,各执一词的时期。但咱们做为NoSql的学习者和应用者,咱们不须要关心和纠结这些NoSql的争论,也不须要参与到这些争论当中。算法
NoSql的共同特色和优点:sql
NoSQL 一般是以key-value形式存储的(如:Memcache,Redis,Mongodb) mongodb
不支持SQL语句,
没有表结构
配置简单
灵活、高效的操做与数据模型
低廉的学习成本
能很好地做为MySql的中间层
能很好地支持PHP
NoSql的共同的缺点:
没有统一的标准
安全性极差
没有正式的官方支持
各类产品还不算成熟
权威支持的产品价格很高(如:阿里云),但这个其实成本如今不少公司给得起,至少比你设置更多的读写分离的数据库服务器成本仍是低了很多.
NoSql的产品分类:
ttServer
redis
mongodb
memcache
Aliyun MQ
KVCache(Memcache)
Memcache是国外社区网站 LiveJournal的开发团队二次开发(加入了内置的分布式算法)的 高性能的分布式内存缓存服务器。通常的使用目的是,经过缓存数据库查询结果,减小数据库访问次数,以提升动态 Web 应用的速度、提升可扩展性。
Memcache的优势:
1.纯内存的存储机制,所以它是全部NoSql产品当中最简单也是速度最快,可是同时也是功能最弱的
2.内置分布式算法,使得开发者不须要本身去实现
3.它能把单项数据缓存的过时时间设置为30天,也能使得单项数据常驻内存当中
4.完美支持PHP的调用
Memcache的缺点:
1.因为memcache使用telnet协议进行传输,没有数据加密的功能,安全性不好
2.Memcache最大的内存存储空间(吞吐量)只有64M,若是64M的内存一旦爆满,Memcache会指定重启,并释放当前全部的内存,在内存数据就是无情的丢失也不会保留。
3.因为Memcache把数据置于内存中,因此服务器进行维护或者重启,那么数据就会丢失
4.数据零散,没法遍历,管理数据完整性很是通常.
Memcache的使用注意事项:
1.不要把安全性,敏感性,具备明文性太高的数据放到memcache当中
2.使用数据时候要注意压缩,尽可能使用一些小型的数据进行存储(产品分类,文章栏目,用户登陆的信息,计数器的结果,用户属性)
Memcache的存储格式:key=>value(键值对的存储方式)
Memcache在国内职场中的使用场景:
lanmp = linux + apache + nosql + mysql + php
当前方式是客户端(用户浏览器)发起请求,这时这种架构的请求方式,咱们称为非实时请求,那么每一次的请求必须经过中间的缓存层面进行,若是缓存中有数据,那么数据库就不会作出任何的响应,若是没有缓存的数据,数据库只会响应一次,并把响应的结果放到内存中等待用户下一次的请求。
memcached:这个表示memcache的rpm软件包,用于实现memcache服务器安装
telnet:这个表示telnet客户端的rpm软件包,这个包的安装用于实现客户端链接memcache服务器
telnet-server:这个表示telnet的服务器端rpm软件包,这个包的安装用于实现telnet客户端的启动
安装memcache这3个包必须一块儿安装,而不能分开安装,不然他们依赖关系你须要本身解决
安装的命令: yum -y install memcached telnet telnet-server
使用(putty)执行命令安装过程以下:
登陆完成后输入yum -y install memcached telnet telnet-server
注意事项:putty操做memcache特别的好用,可是不是表明只能使用putty执行以上的安装命令,你也可使用xshell或者其余工具执行这个命令,然而xshell操做memcache不太好使。
在memcache服务器中,若是但愿能正常的启动memcache,而且能够在客户端正常的链接memcache服务器,那么须要启动memcached和xinetd的服务器。
memcached的说明:memcached是memcache服务器的守护进程,负责memcache服务器的启动,重启,关闭和状态的监控。其管理命令以下:
#启动memcache服务器
service memcached start
#重启memcache服务器
service memcached restart
#中止memcache服务器
service memcached stop
#查看守护进程的状态
service memceched status
#把memcached加入开机脚本
chkconfig memcached on
注意事项:若是重启或者中止memcache服务器,那么在memcache中存储的数据就会立刻丢失,没法恢复。
xinetd的说明: xinetd是telnet服务器的守护进程,负责telnet客户端能够正常链接memcache服务器,默认的状况下占据11211端口
#启动telnet服务器
service xinetd start
#重启telnet服务器
service xinetd restart
#中止telnet服务器
service xinetd stop
#查看守护进程的状态
service xinetd status
#把xinetd加入开机脚本
chkconfig xinetd on
注意事项:xinetd重启或者中止,并不会致使memcache的数据丢失,但客户端会没法链接memcache服务器。因此若是想维护memcache服务器,那么能够中止telnet服务器
首先要清楚的知道,telnet和memcached必定要处于启动的状态,而且要知道当前的默认端口为11211
第2步:若是没有启动xinetd和memcache须要启动,命令以下;
service memcached start
service xinetd start
第2步:使用telnet客户端进行memcache服务器的链接
命令格式: telnet [memcache的服务器地址] [端口]
注意事项:若是刚打开telnet客户端敲入回车键,那么会出现ERROR,这时并非表明链接失败,而是由于memcache服务器在等待您输入正确的指令,而回车键并非一个正确的指令,因此它会报出ERROR的错误
这个命令用于获取memcache内存中的数据
命令格式: get [键名(key)]
好比:若是但愿获取一个为name的键名,可使用命令: get name
若是key不存在那么就会以END结束,若是key存在,那么返回以下所示:
这个命令就是像memcache的内存当中的某一个值添加数据,然而它在现实开发当中不多用,通常咱们会用set直接取代它的操做,因此这个命令你只须要了解就能够了,
命令格式:add 键名 标识符 过时时间 字节的大小
说明:
标识符:通常只会填入1,也能够填写2,也能够999,也能够填写888,随便乱填但不能够是负数和0,也不能够是中文和特殊字符,只能是正整数
过时时间:0表明永远不过时,其他请求就是以秒做为单位,如:设为30,表明30秒后过时。
最大秒数能够设置为30*86400=30天
字节大小:就是打算添加的数据有多大,如:设为3,表明输入3个字节
使用add命令一个键名为name的数据,键值为php
命令的运行效果以下图所示:
add name 1 0 3
这个命令在开发当中使用的频率是100%,它做用很特别,若是一个键名已经存在那么set命令会修改该键名的值,若是该键名不存在那么set会建立这个键名的值,因此set既能够添加也能够修改,所以add就意义不大,由于add只能添加而不可以修改。
其命令格式: set 键名 标识符 过时时间 字节的大小
说明:
标识符:通常只会填入1
过时时间:0表明永远不过时,其他请求就是以秒做为单位,如:设为30,表明30秒后过时
字节大小:就是打算添加的数据有多大,如:设为3,表明输入3个字节
命令的运行效果以下图所示:
1.用set修改一个已经存在的键名,如:name
执行结果以下:
若是使用set命令,在memcache中操做一个已经存在的key那么就是修改的行为
set name 1 0 4 : 修改一个已经存在的键名为4个字节而且永远不过时
java : 修改name中的值
STORED : 表明写入成功
2.用set添加一个不存在的键名,如:project
执行结果以下:
发觉set命令若是操做一个不存在的key,那么其就是建立的行为
set project 1 0 6 : 添加不能存在的键名为project,其实大小为6个字节而且永远不过时
lovely : 添加project中的值
STORED : 表明写入成功
面试题:add和set有啥区别?
若是add操做的key已经存在,那么就会报错
而set不会报错,而是修改为功
所以咱们使用set概率是100%
这个命令就是删除 memcache在内存中的键,若是把键名删除了,那么对应的值也删除了,内存所占据大小呢也释放了
命令格式:delete 键名(能够存在也能够不存在)
命令的运行效果以下:
若是删除一个不存在的Key,那么会报出NOT_FOUND
若是删除成功就会释放当前的内存空间大小,而且报出DELETED
总结:以上实现增删查改的命令后,我发觉putty的界面很是饱满,咱们可以清屏吗?
另一个问题,若是我想退出memcache怎么呢?没法退出,因此只能关闭putty.
问题来了:那么putty不能够清屏也不能退出,那么为何还要使用Putty而不使用xshell,其实xshell比putty更难用,所以咱们通常使用putty.
关闭putty数据会被清空吗?由于关闭ssh工具不会关闭memcached的服务,若是但愿数据被清空,那么若是咱们使用service memcached restart会被清空吗?
这时,若是从新链接memcache服务器,那么发觉数据就会被清空,以下所示:
因此重启或中止memcached的服务都会致使数据丢失,所以memcache不能存储敏感且重要的数据
若是咱们关闭xinetd服务(telnet协议),那么memcache还会被清空数据吗?
关闭telnet不会致使memcache的数据丢失,所以咱们若是但愿维护memcache中的数据,咱们能够关闭xinetd
memcache的过时时间通常用于add命令和set命令当中,过时时间以秒做为单位,0表示永远不过时,永远不过时的数据会永远占据着内存的空间,直到删除键名或者memcache重启时才会被释放,所以设置一个永远不过时的键名须要深思熟虑。使用过时时间的设置,能够有效的节省内存的空间。
通常设置过时时间,虽然理论上也可使用add命令,然而因为set命令具有add命令的功能,且set命令自己具有修改的功能,所以咱们在设置过时时间时,使用set命令的概率是最高的。
其命令格式: set 键名 标识符 过时时间 字节的大小
其实这个命令关键点就是过时时间的参数不能设置为0和小数点,必须为正整数
好比说:把一个为project2的键名的值设置为20秒内过时,可使用如下方式:
set project2 1 20 6
在memcache当中,memcache默认的最大存储内存空间为64M,而memcache对单个键名的存储的空间最大为1M,因此设置键名的时候,要合理的分配字节的大小,而后memcache分配字节大小是很是严格的,好比说,你分配了一个为3个字节大小的键名,若是你使用的时候超过3个字节或者有时候不足3个字节那么memcache就会报错。
1.设置一个为project3,字节大小为3,永远不过时的键名,其值为java(超过3个字节),这时因为java的值是4个字节,超过了3个字节的存储空间,这时memcache就会报错,效果以下:
2.设置一个字节的大小为3个字节,可是咱们输入的数据为2个字节,以下所示:
3.设置一个字节的大小为8个字节,可是咱们输入的数据为4个字节,以下所示:
以上现象很是的奇葩,很差控制,因此咱们在开发中,通常要预估数据的字节大小,输入的字节是多少那么就键入多少,不要形成浪费
思考题:若是我但愿把Memcache当中全部的数据清除,释放掉内存,咱们应该怎么作呢?
1)暴力关闭或者重启linux或者关闭或者重启memcached服务
2)若是仅仅但愿在业务当中放弃全部的key,那么咱们可使用flush_all命令
以上的操做咱们所有都是发生在命令行当中,那么若是咱们但愿在php当中操做memcache,那么咱们还须要安装memcache的扩展,可是咱们若是从php的官方文档中搜索memcache,你会发觉有两个memcache的相关类一个叫memcache一个叫memcached,这二者有什么区别,咱们更应使用哪个呢?
若是咱们打开http://www.php.net搜索memcache关键字会出现如下状况,如图所示:
memcache和memcached是的功能是同样的.
memcache类支持php5.3 - php5.6的单服务器和多服务器的操做但多服务器的操做在Linux操做系统中兼容性会出现bug.为了在Linux中很好地兼容服务器的操做php官方推出了一个叫memcached的类,该类只能运行在Linux操做系统当中支持Linux的单服务器和多服务器操做,若是你使用Linux操做系统做为服务器必须使用Memcached类.
由于Memcached类是基于一个叫libmemcached的库,这个库是用C语言开发的在Linux当中运行的效率最高.
您能够同时安装这两个类,若是当前是php5.6那么咱们还须要用到memcached的addServer方法来作分布式服务器的链接,安装的命令以下:
yum install -y --enablerepo=remi --enablerepo=remi-php56 libmemcached php-pecl-memcache php-pecl-memcached
第1步:在putty或者xshell当中键入如下命令,进行php扩展安装,命令以下所示:
yum install -y --enablerepo=remi --enablerepo=remi-php56 libmemcached php-pecl-memcache php-pecl-memcached
出现如下界面,表明memcache和memcached的扩展库已经完成了安装
第2步:安装完成后,必须重启apache服务器,重启的命令:service httpd restart
第3步:重启apache服务器完成后,须要从新在浏览器端访问phpinfo.php这个文件查在apache的站点目录/var/www/html编写phpinfo.php,运行后以下:
看是否已经存在memcache和memcached的扩展模块,出现如下界面,就表明安装成功:
重要方法:
addServer(host,port):host就是linux服务器的地址,port通常就是11211(memcached的端口),用于链接memcached服务器
set(key,value,exipre) : 用于修改或者添加内存的memcached数据,该方法有3个参数
key键名,value是键值,exipre是过时时间,exipre默认为0,若是设置为秒,最大只能设置为30天秒数
get(key):获取对于键值对
delete(key):删除memcached当中键值对
详细代码参考code/addServer.php,上传代码到/var/www/html中进行测试
测试结果以下图所示:
详细代码参考code/set.php,上传代码到/var/www/html中进行测试
在memcache中建立一个叫作phper的键名,值为jimmy
若是该key在15秒后过时,那么咱们能够把代码设置为以下:
测试结果以下图所示:
telnet客户端的结果以下:
若是15秒过时后,就查不到结果了:
详细代码参考code/get.php,上传代码到/var/www/html中进行测试
以上操做若是获取的数据在memcached命令行中set的key是没有办法正常获取,会返回 0或者白屏现象,除非把标识符设置为0
若是使用php去set,而后在同时get那么就不会存在任何的问题
测试结果以下图所示:
telnet客户端的结果以下:
4.使用delete删除Memcache中的键名
详细代码参考code/delete.php,上传代码到/var/www/html中进行测试
第1步:使用php先set一个key,而后删除
telnet客户端的结果以下:
去掉注释进行删除,结果以下:
php本身set的key是能够成功delete的
第2步:使用memcached先set一个key,而后删除
修改delete.php的代码以下:
执行结果以下:
发觉php的delete方法能够删除memcache命令行中set的key,不须要理会这个能够key的标识符
标量类型(4种):string int boolean float
复合类型(2种):array object
特殊类型(3种): 序列化数据resource null
详细代码参考code/biaoliang.php,上传代码到/var/www/html中进行测试
测试结果以下图所示:
memcache可以实现自动的数据类型转化,查看telnet的结果以下:
详细代码参考code/mix_array.php,上传代码到/var/www/html中进行测试
测试结果以下图所示:
telnet客户端的结果以下:
详细代码参考code/mix_object.php,上传代码到/var/www/html中进行测试
详细代码参考code/mix_object2.php,上传代码到/var/www/html中进行测试
测试结果以下图所示:
查看php的set结果
查看php的get结果
详细代码参考code/serialize.php,上传代码到/var/www/html中进行测试
测试结果以下图所示:
因为序列化后的内容是string因此至关于你把序列化内容用标量string进行存储,因此memcache的返回在序列化中就是返回string,所以若是你须要反序列化就能够直接调用unserialize方法:
测试结果以下:
说明:在现实开发当中把null值和resource的类型值存放在memcache当中的意义是不大,所以特殊类型的存储只须要关心序列化的存储操做。
在网站当中咱们作登陆通常都是读操做,好比有一个用户名为zhangsan登陆网站,那么咱们一般的语句为select * from users where username=’zhangsan’,因而username咱们通常会设置索引字段。这时有2个这样的优化手段:
1)前缀索引
2)使用memcache+前缀索引进行优化
在开发的过程当中,默认的状况下若是你对一个字段进行索引,那么mysql会根据字段的最大字符的长度进行索引。有以下记录:
zhangsan
lisi
wangwu
假设对这3条数据进行索引咱们会使用如下的语句
create index uname on tableName(username),这时uname的长度有多少呢?
长度就是按最大的字符长度zhangsan来取值因此索引的长度等于8个字符,发觉lisi用户8个字符,wangwu也用不上8个字符的索引,所以就形成索引的空间浪费,致使MYI文件增大,由于就有前缀索引的说法,假设有如下用户:
张三
李四
王五
其实对于以上的用户来讲,咱们只需呼叫其姓氏就可以定位某一个具体用户,因此前缀索引的定义就是若是索引的某一个长度已经足以标识一个记录的全部值,那么咱们就把索引成为前缀索引,好比:张能够标识张三,张就是一个前缀索引。若是须要实现前缀索引咱们能够参考如下例子:
第1步:把demo.sql文件上传到Linux服务器当中的任意目录,而后使用mysql的导入方式进行数据的导入,以下图所示:
查询结果以下:
每一条数据都是惟一的,而且该表也没有创建任何的索引,因此须要对该表进行前缀因此的创建以节省索引的空间,所以咱们创建前缀,那么前缀索引的长度应该是多少呢?假设不知道咱们就须要去求出前缀索引的长度
第2步:用肉眼查看发觉David Williamson是最长的记录,所以咱们说若是咱们假设用前缀长度5,7,9来对数据进行呼叫那么是否能够成功定位出每条惟一的数据呢?编写select语句以下,分别统计5,7,9这3个数字的前缀:
所以5位的长度是不成立的,没法成为前缀索引的长度。
所以7位的长度是不成立的,没法成为前缀索引的长度。
9是索引的长度,若是使用David Williamson来做作索引的长度是16位,9位可以大大节省7个字符的长度,所以咱们求出了前缀索引最优的长度是9,因此咱们就可使用9来创建前缀索引.
第3步:使用前缀索引创建语法以下:
alter table 表名 add index 索引名称(字段名称(长度));
执行语句以下所示:
第4步:使用explain查看是否可以使用前缀索引
explain select * from users where username=’David Williamson’
发觉前缀索引是能够被9个长度所使用的,这时其实咱们只是在数据库的层面优化了索引,可是不管数据库作了多好优化,若是中间没有一个缓存的层面,那么全部的压力和响应都会发生在数据库当中,数据库必定须要去硬盘当中查找数据,无论数据是否存在,由于咱们能够减小数据库压力,令数据库能够获得休息的时间。
咱们明白前缀索引的原理后,咱们能够设计用户表以下:
编写php的优化登陆代码以下:
测试以下:
session在默认的状况下以文件的方式放在Linux当中,因此session.save_handler为files
每个session其实就指代一个访问网站的用户,若是网站的访问量不少,那么就会尝试不少的session文件,在session.save_path目录中(/var/lib/php/session),那么文件增多就会致使硬盘的IO读写压力过大,而且会占据服务器不少的硬盘空间,所以咱们能够优化session的存储方式为memcache,首先咱们先编写代码来查看session的默认存储方式
首先,通过分析咱们知道session.save_handler是表明sesession默认存储方式为files,而存储的文件路径记录在session.save_path当中,放置在linux服务器中/var/lib/php/session,在phpinfo当中以下图所示
1.编写php文件(code/default_session.php)查看默认的存储结果,代码以下图所示
在浏览器中发觉session_id以下图所示
在linux的putty中切换到/var/lib/php/session中,该目录是session默认的存储目录,进行ls -lh的查看结果以下图所示:
打开该文件,工做目录在/var/lib/php/session下使用vim打开进行查看
内容以下图所示:
所以足以证实session是存放在文件当中的,而这个缺点也是显而易见的。
2.因为file的存储读取内容比内存慢,且占据硬盘的空间,因此咱们须要 修改session默认存储方式由files变为memcache,以下图所示:
详细代码参考code/mem_session.php,上传代码到/var/www/html中进行测试
修改session存储方式能够经过修改session.save_handler去改变
修改memcache的链接方式能够经过修该session.save_path去改变
把代码上传到/var/www/html下进行测试:
在正式使用浏览器测试以前,首先为了确保实验的正确性那么必须先删除/var/lib/php/session目录下全部的文件,以便于您的观察,若是php代码运行后,该目录不会在产生文件,而且memcache当中会出现session的键名和键值内容,那么就表明session成功的存储到memcache当中去了。因此必须遵循如下步骤
第一步:cd /var/lib/php/session下删除全部的文件
确认工做目录完成后,使用rm -rf *删除全部的文件
第二步:在浏览中访问mem_session.php,结果以下图所示:
出现以上结果,立刻去查看linux中的/var/lib/php/session下是否存在一个文件,使用命令ls -lh
第三步:复制浏览器中的session_id
而后在telnet客户端使用get iafcuise2jdmk5p2bvgftkevg1进行查看
由于session会用session_id做为memcache的键名对 session中的内容进行存储,以下图所示;
出现以上结果,表明session成功的存储到memcache当中,速度会获得大大的提高。
若是用户长时间不操做,默认的状况下大概是30分钟左右,那么memcache就会把session_id的键名删除。
分布式的意思其实就创建1个以上的数据库,分布在不一样的服务器当中,因此读写分离和主从复制的MySql数据库服务器又能够称为MySql分布式数据库,但MySql的读写分离你是须要本身实现的,而且你须要清楚的知道哪台服务器是负责写,哪台服务器负责读.
部署分布式的过程,其实就是克隆服务器Slave的过程,由于咱们在数据库读写分离的Grant用户受权中已经克隆了一台Slave服务器,因此Slave的克隆咱们在这里能够省略了.`然而你依然须要注意如下几点:
第1点:
Master和Slave这时在分布式服务器当中他们属于平级的服务器,没有因此谁只能读谁只能写的区分,Master和Slave服务器在Memcache服务器中是可读可写的,也就是说能够随便的读写,由于Memcache的内置一个分布式的算法,可以清楚的区分数据在哪一个服务器当中,因此在Memcache中这个是一个很是方便的,也不须要你配置任何文件更没有什么主从复制的过程,这也是Memcache很特别的一点.其实由于Memcache的数据是缓存数据是临时性的,因此Memcache开发者认为主从复制没意义,因此他们经过分布式算法来管理数据.
第2点:
Master和Slave服务器必须同时都关闭了iptables和selinux,不然分布式是不会成功
第3点:
Master和Slave服务器必须同时都安装了Memcached的服务器而且开启了该服务
而且要肯定Master的服务器IP和Slave服务器IP
Master的IP为: 192.168.84.197
Slave的IP为:192.168.84.85
完成上述3点那么memcache的分布式服务器就部署成功了。
详细代码参考code/master.php,上传代码到Master服务器当中/var/www/html中进行测试
在master服务器当中插入一条memcache的数据以下:
这条数据在Master服务器当中
在telnet当中查看master的数据以下:
详细代码参考code/slave.php,上传代码到Master服务器当中/var/www/html中进行测试
这条数据在Slave服务器当中
在telnet当中查看slave的数据以下:
这时两条数据在不一样的服务器当中,咱们若是但愿查找name2这个数据,那么memcache可否清楚知道name2在slave服务器当中呢,同理若是咱们但愿查找name1这个数据,那么memcache可以否清楚知道这个数据在master服务当中?这个答案是确定的,由于memcache内置了一种分布式的算法,可以清楚知道当前的数据在哪一个服务器当中而不须要开发这本身去编写代码进行寻找,php分布式的操做代码以下:
1)获取name2的数据
详细代码参考code/getFromServers,上传代码到Master服务器当中/var/www/html中进行测试
测试结果以下:
2)获取name1的数据
测试结果以下:
至此php操做memcache分布式就成功了。
建议使用thinkphp3.2.3,由于这个版本是tp的经典版本,使用的用户最多
第1步:部署thinkphp3.2.3到lamp当中
在浏览器中运行thinkphp安装
第2步:若是但愿操做memcache就须要使用到S方法,那么首先在Application/Common/Conf/config.php文件中配置memcache以下所示:
第3步:在IndexController.class.php文件中定义memcached的S操做方法,以下:
测试效果以下:
第4步:使用S方法获取memcache中的数据到网页中显示
第5步:使用S方法删除memcache中的数据