一、memcache的介绍
1、memcached基本概念
(1)Memcached是danga的一个项目,最早是LiveJournal服务的,最初为了加速LiveJournal访问速度而开发的,后来被很多大型的网站采用。
官方网站: www.danga.com 和 http://memcached.org
(2)Memcached是一个高性能的分布式的内存对象缓存系统,
用于构建大负载的网站,来分担数据库的压力,
简单的说就是将频繁访问的数据存储到内存中,然后从内存中读取,从而大大提高读取速度。
学习资源:http://www.runoob.com/memcach...
2、基本原理
当前客户端首次访问热点新闻时,从数据库里面取出,并把该热点信息数据给给缓存到服务器的内存里面,后续用户访问时,直接从内存里面获取数据,返回即可。
3、与mysql比较
二、安装
先下载软件,拷贝到一个具体位置,一般是和环境软件在一块。
- 以管理员的方式,进入cmd,并进入到memcached软件所在的目录
通过memcached -h 查看安装成服务的一些指令
- 执行memcached –d install进行安装
- 安装完成后,进入启动
windows下dos命令窗口输入netstat -ano即可查看端口使用情况,
如果要查看指定端口是否被占用可以使用命令
netstat -ano|findstr 端口号
注意:也可以无需安装,直接启动memcache软件
三、操作memcache软件
1、使用客户端连接memcache
语法:
telnet ip地址 端口号
按回车出现如下界面链接成功,
若提示“telnet不是内部或外部指令”
解决:安装本电脑的telnet客户端服务即可。
控制面板--->程序和功能--->打开或关闭windows服务--->Telnet客户端
使用其它工具通过telnet协议连接memcache
2、设置数据
1、添加数据
语法:
注意:使用add指令,添加数据时,如果键已经存在,则添加失败
2、修改数据
语法:
注意:在修改时,如果键不存在,则修改失败。
3、设置数据
语法:
使用set 操作,如果键已经存在,则是修改,如果键没有存在,则是添加。
3、获取数据
语法:
4、删除数据
删除单个数据
删除所有数据,(在实际工作中,要慎用)
5、其它指令
incr :加法操作,相加指定的值,返回相加后的结果,
语法:incr key value
decr :减法操作,减去指定的值,返回相减后的结果,
语法:decr key value
6、状态指令
语法命令:stats
主要通过该命令来计算memcache的效率(命中率)
命中率计算:get_hist/cmd_get
如果命中率非常低,则说明memcache低效。需要调整缓存的数据。
7、失效时间
失效时间,有两种设置方式:
案例1:比如我们要设置一个缓存项,想要缓存20天,应该如何设置
第一种方式,使用时间间隔 20*24*3600
第二种方式:使用时间戳 time()+20*24*3600
案例2:比如我们要设置一个缓存项,想要缓存40天,应该如何设置
此时就只有一种方式,使用到期的时间戳。time()+40*24*3600
注意:时间间隔与时间戳都是整数,如何来区别呢?
如果整数小于2592000,则是时间间隔
如果要使用时间戳,则必须大于当前的时间戳。
8、key与value的限制
设置key的长度不要超过250个字节。value的大小不要超过1MB的数据。
四、使用php来操作memcache
1、安装memcache扩展
if (extension_loaded('memcached')) {
$this->cache = new \Memcached;
}else if(extension_loaded ('memcache'))
$this->cache = new \Memcache;
else{
$this->active = false;
Log::error('Cache not support!');
return false;
}
- 准备扩展文件
通过phpinfo()函数查看php的版本。
注意: 扩展文件要和php的版本相对应。
- 把对应的扩展文件,拷贝到php的安装目录的ext目录里面。
- 打开php.ini配置文件,进行配置加载memcache的扩展。
- 重启apache,通过phpinfo 函数进行测试,如果出现如下提示,则证明已经安装成功。
2、入门测试
在php的手册里面,给我们提供了一个memcache的类,使用该类的一些方法完成操作。
获取数据
注意点:
3、php数据类型探讨存入memcache
php数据类型有标量和非标量
- 标量数据,存储到memcache里面
说明:如果是标量数据存储到memcache里面,则取出数据时,保持原样类型。
- 非标量数据,存储到memcache里面
非标量数据:序列化后再存入到memcached服务器中,得到时反序列化工作。
序列化与反序列化过程,是由memcache的扩展完成的,无需我们自己干预。
什么是序列化:
总结:除了资源类型之外,其他的类型我们都可以存储,当然一般是存储字符串和数组。
4、案例1:缓存sql语句的执行结果
5、案例2:缓存新闻详情内容
新闻列表页
新闻详情页
6、memcache在tp5框架中使用
ThinkPHP采用think\Cache
类(实际使用think\facade\Cache
类即可)提供缓存功能支持。
内置支持的缓存类型包括file、memcache、wincache、sqlite、redis和xcache。
在配置目录下面的cache.php
文件中,进行如下配置:
public function del()
{
$res = Cache::rm('age');
dump($res);
}
五、memcache分布式配置
1、简介说明
Memcached是一个高性能的分布式的内存对象缓存系统
每台服务器写、读操作都有
把对memcache的许多操作平均地给各个分支服务器完成
memcache可使用的内存空间是多个服务器空间的“算术和”
php无需关心具体操作是那个memcache服务器,在memcache内部有具体算法,帮助php实现具体分发(操作的memcache)
2、具体搭建步骤使用
分布式的多个memcache服务搭建:
环境搭建:至少需要两台memcache服务器,
设置数据代码:
$mem = new Memcache();
//连接三台memcache服务器
$mem->addServer('192.168.1.100',11211);
$mem->addServer('192.168.1.200',11211);
$mem->addServer('192.168.1.210',11211);
//设置缓存数据
$mem->set('name','xiaogang',0,3600);
$mem->set('age', 12, 0, 3600);
$mem->set('email', '[email protected]', 0, 3600);
$mem->set('height',189,0,3600);
获取数据
$mem = new Memcache();
//连接三台memcache服务器
$mem->addServer('192.168.1.100',11211);
$mem->addServer('192.168.1.200',11211);
$mem->addServer('192.168.1.210',11211);
//取数据
$name = $mem->get('name');
$age = $mem->get('age');
$email = $mem->get('email');
$height = $mem->get('height');
需要注意:
六、session数据存入memcache
需要在php.ini文件里面进行配置,session数据入memcache.
我们可以使用一个函数ini_set(),完成php.ini里面的一些配置,该配置只能在当前页面有效。
ini_set('session.save_handler','memcache');
ini_set('session.save_path','tcp://localhost:11210');
存储数据的代码:
注意:把session数据存储到memcache里面,是以session_id为键的。
获取数据的代码:
七、其他问题
1、memcache适合存储哪些数据
2、惰性删除
Lazy Expiration
3、最近最少使用原则
4、安全性的问题
在memcache里面,没有设置安全认证机制,因为memache就是专做缓存使用,主要突出缓存优势。
一般情况下,memcache服务器是在内网中的,不会暴露在公网中,因此一些恶意用户就无法操作memcache服务器。
-l 连接的IP地址, 默认是本机
5、缓存雪崩问题
如果在设置缓存周期时,设置的缓存周期都一样,当正好赶上高并发时,如果缓存都同时失效,则会把请求涌向mysql服务器,mysql服务器有可能会出现宕机现象
解决方案:设置不同的缓存周期。
八、Linux环境下安装
Linux系统安装memcached,首先要先安装libevent库。
yum install libevent libevent-devel
注:因为memcached依赖于libevent库,因此,需要先编译libevent
编译Memcached时,要指定Libevent
1、安装libevent软件
(1)下载libevent软件,上传到linux服务器,解压
tar -zxvf libevent-2.0.21-stable.tar.gz
(2)进入解压目录
cd libevent-2.0.21-stable
(3)进行配置
./configure --prefix=/usr/local/libevent
4)编译安装
make && make install
2、安装memcache
(1)解压
tar -zxvf memcached-1.4.24.tar.gz
(2)进入解压的目录
cd memcached-1.4.24
(3)配置
./configure --prefix=/usr/local/memcache --with-libevent=/usr/local/libevent
(4)编译安装
make && make install
注意,linux下面memcache的安装位置,启动时,使用bin目录下面的memcached启动;
启动: