优化之内存缓存memcache

一、大型网站优化

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的操作,进行缓存。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值