一、大型网站优化
1.1介绍
如果我们平时遇到的高并发或者大流量访问等问题时,我们就会思考网站优化。因为无论任何网站归根结底都是和数据进行打交道,一个网站不断地运营开发,功能会越来越多,用户量也越来越多。代码量,数据量多,就会造成网站运行逐渐变慢,造成用户体验不好。
所以,要针对网站进行优化,使其速度提高。
1.2网站访问流程
一个网站的访问大概流程如下:
客户端(浏览器)=》服务器(Apache)=》PHP模块=》mysql数据库
链接的部分越多,可能造成的访问速度就越慢
而我们平时说的对网站的优化就是从这几个步骤中入手,进行优化。
1.3大型网站
所谓的大型网站是指:每天的访问量,并发量在百千万级别。
PV 页面的访问的数量 网站所有页面的访问量
IP 指访问者的地址或身份
1.4如何优化
(1)web服务器端的优化(Apache)响应请求的数量
(2)静态化 对于数据不会经常发生变化的,把其生成为静态文件
(3)内存缓存 请求数据库时,但是数据库的响应请求不高,读写不高。把数据库中常用到的信息,缓存到一个软件(内存缓存)
二、内存缓存之memcache
2.1memcache介绍
Memcached 是国外 社区 网站 LiveJournal 的开发团队开发的 高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。把经常使用到数据,放到内存缓存里。
2.2安装软件
2.2.1直接前端运行
第一种运行方式:直接将memcached.exe 拖入cmd命令行进行运行,敲击回车。然后查看任务管理器进程,是否有memcached运行。
注意:此种情况下的运行方式称之为前端运行服务,但是cmd窗口不可以关闭,关闭的话,软件也就关闭,不方便使用。
2.2.2后台服务运行
第二种运行方式:安装memcached的windows的服务,然后进行服务的启动。
第一步:把memcached放置到一个安装运行的目录,目录要求不能够有中文名。
第二步:使用管理员cmd命令行。根据对应参数,进行memcached的服务的安装。
2.2.3启动错误解决
在安装之后,不能够正常启动,可能是由于系统缺少系统拓展文件
2.3PHP操作memcache
PHP操作memcached需要安装PHP的memcache拓展,安装了拓展之后,就相当于拥有了一个memcached的操作类,可以通过这类,进行memcache的相关操作。
2.3.1开启扩展
第一步:通过phpinfo确定PHP版本、软件位数、运行的平台
第二步:找对应的版本和参数拓展文件,放入到PHP目录下的拓展目录ext
第三步:修改对应的php.ini相关开启参数(1008.extension=memcache.dll)名称要和ext目录下的文件名称一致,没有就添加一句。拓展文件放到ext目录,修改好phpini配置文件之后,重新启动服务。
第四步:查看是否安装成功memcache的拓展
2.3.2操作原理
1)连接memcache
代码实现
<?php
//安装了拓展之后,就拥有了一个类
//实例化类
$mem=new Memcahe;
//连接memcache
//$mem->connect('ip',port);
//服务使用是由ip和端口进行连接的
//memcache默认端口号
$rs=$mem->connect('127.0.0.1',11211);
//查看连接结果
var_dump($rs)
2)写入数据
set(key,value,是否压缩[0/1],过期时间);
3)读取数据
get(key)通过key获取到value的值
代码实现
<?php
//安装了拓展之后,就拥有了一个类
//实例化类
$mem=new Memcahe;
//连接memcache
//$mem->connect('ip',port);
//服务使用是由ip和端口进行连接的
//memcache默认端口号
$rs=$mem->connect('127.0.0.1',11211);
//写入数据
//memcache存储是key=>value
//set(key,value,是否过期,是否压缩)
$rs=$mem->set('name','phpstudy',0,0);
//查看连接结果
var_dump($rs);
echo'<hr>';
//通过key获取value值
$data=$mem->get('name');
var_dump($data);
2.3.3记录格式
memcache记录的方式,是以key=》value方式。所以很多操作就是针对key的。
①设置key set(key,value,是否压缩,过期时间)
②获取key的value值 get(key)
key的命名要求,key没有特殊的格式要求,但是一般不出现空格、特殊字符等,命名一般要求是可以直观表示这个key所存的值意义。
firstname 姓 缩写fn 合理进行命名,明显fn没有firstname更具有可读性。
不能出现空格或特殊字符,虽然可以设置成功,但是不建议推荐。
2.3.4有效期
做缓存都是有有效期的,缓存数据的有效期,就是说在规定时间内,数据是有效的,过了这个时间,数据就失效了,不是有效的数据了。
memcache里设置数据有效期,就是设置key的有效期。
①在设置的时候,设置第四个参数,为一个时间差,时间差就是多少秒之后过期
$mem->set(key,value,0,时间差);
比如:这个key的数据要60s之后过期,第四个参数就设置为60
②时间戳方式,在第四个参数,传入多少秒之后的时间戳,就可以实现有效期时间的设置
$mem->set(key,value,0,时间戳);
比如:这个key的数据要在1个小时后过期,第四个参数就设置为time()+3600
以上两种方式,都可以进行设置,也可以实现向要的效果,但是当时间差大于30天的时候,就被认为是一个时间戳了。
2.3.5存储各种数据类型
2.3.6其他相关操作方法
$mem->connect(ip,port) //连接memcache
$mem->set(key,value,是否压缩,过期时间) //设置key的value
$mem->get(key) //通过key获取value
$mem -> close() 关闭memcache
$mem -> add(key,value,压缩,有效期)
key存在就报错,不存在就添加
$mem -> replace(key,value,压缩,有效期)
key存在就替换,不存在就报错
$mem -> decrement(key,int(2))
按照num的幅度,对key的值进行减少操作
$mem -> increment(key,int(3))
按照num的幅度,对key的值进行增加操作
$mem -> delete(key,规定时间) //规定时间指的就是多少秒之后删除,0为立即执行
删除key
$mem -> flush()
删除全部元素
2.4命令行操作memcache
2.5失效机制
1)删除过期的缓存项时,采取的策略,懒惰模式。
当缓存项过期时,并不立即删除。而是在下次获取时再删除。
类似的有php垃圾回收机制,session过期回收
2)缓存空间已满,LRU策略,删除旧的缓存项
LRU:Least Recently USE。最少最近使用!使用指的是get。
有时候会通过启动服务时设置 -M 参数禁用LRU 缓存满,写入报一个错误
2.6session共享机制
2.7分布式memcache的运行
2.8memcache实例实现
2.9TP框架实现
了解tp框架里,如何使用memcache做缓存操作。
tp框架S() 专门的缓存方法 封装memcache的连接,可以使用S()方式,进行memcache的操作,进行缓存。