一、memcache的介绍

1、memcached基本概念

(1)Memcached是danga的一个项目,最早是LiveJournal服务的,最初为了加速LiveJournal访问速度而开发的,后来被很多大型的网站采用。

官方网站: www.danga.comhttp://memcached.org

(2)Memcached是一个高性能的分布式的内存对象缓存系统,

用于构建大负载的网站,来分担数据库的压力,

简单的说就是将频繁访问的数据存储到内存中,然后从内存中读取,从而大大提高读取速度。

学习资源:http://www.runoob.com/memcach...

2、基本原理

当前客户端首次访问热点新闻时,从数据库里面取出,并把该热点信息数据给给缓存到服务器的内存里面,后续用户访问时,直接从内存里面获取数据,返回即可。

3、与mysql比较

二、安装

先下载软件,拷贝到一个具体位置,一般是和环境软件在一块。

  1. 以管理员的方式,进入cmd,并进入到memcached软件所在的目录

    通过memcached -h 查看安装成服务的一些指令

  1. 执行memcached –d install进行安装

  2. 安装完成后,进入启动


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;
    }
  1. 准备扩展文件

通过phpinfo()函数查看php的版本。

注意: 扩展文件要和php的版本相对应。

  1. 把对应的扩展文件,拷贝到php的安装目录的ext目录里面。

  1. 打开php.ini配置文件,进行配置加载memcache的扩展。

  2. 重启apache,通过phpinfo 函数进行测试,如果出现如下提示,则证明已经安装成功。

2、入门测试

在php的手册里面,给我们提供了一个memcache的类,使用该类的一些方法完成操作。

获取数据

注意点:

3、php数据类型探讨存入memcache

php数据类型有标量和非标量

  1. 标量数据,存储到memcache里面

说明:如果是标量数据存储到memcache里面,则取出数据时,保持原样类型。


  1. 非标量数据,存储到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启动;

启动:

03-05 16:16