PHP MemCache缓存加速的完整入门教程内容及实战案例

一、MemCache的基本概念
MemCache系统是通过客户端发送的命令(set/get)管理“内存中缓存”的数据。客户端在于MemCached服务器建立连接以后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符key,存取操作均通过这个key进行,保存到memcached中的对象实际上是放置在内存中的,而并不是保存在缓存文件中的,这也是为什么MemCached能够如此告诉快速的原因。

memcached工作原理

MemCache在WEB中的应用:

1、使用MemCache作为中间缓冲层减少数据库的压力
2、MemCache分布式的应用

二、MemCache的安装及管理
1、Linux下安装MemCache软件
省略…

2、Window下安装MemCache软件
下载MemCache二进制数据包;
解压后放在某个磁盘的分区下面:如D:\

执行安装命令:

D:\>memcached.exe -d install

安装memcached

通过计算机管理的“服务”中查看刚安装的memcached软件。

计算机管理的服务查看memcached

启动memcached服务器:

D:\>memcached.exe -d start

启动memcached服务器

停止memcached服务器的运行:

D:\>memcached.exe -d stop

3、memcached服务器的管理

一些常用的管理选项:

例如:memcached.exe -d -m 2048 -l localhost -p 11211

-d 以守护程序方式运行memcached
-m 2048 2GB内存
-l localhost 监听本机
端口 11211

memcached服务器的管理

三、使用Telnet作为memcached的客户端管理
1、连接memcached服务器

telnet localhost 11211

连接memcached服务器

2、基本的memcached客户端命令

stats:当前所有memcached服务器运行的状态信息
add:添加一个数据到服务器
set:替换一个已经存在的数据。如果数据不存在,则和add命令相同。
get:从服务器端提取指定的数据。
delete:删除指定的单个数据。清除所有的数据,可以使用flush_all指令。

3、数据管理指令

添加(add)、修改(set)

<命令><键><标记><有效期><数据长度>

键:key
标记:一个16位的无符号整型数据,用来设置服务器端和客户端的一些交互操作
有效期:0表示无限制,单位是秒

memcached 数据管理指令

删除(delete)和获取(get)

<命令><键>

memcached 删除数据管理指令

四、PHP的memcached管理接口
1、安装PHP中的MemCache应用程序扩展接口
安装文件后,在配置文件中加入“extension=php_memcache.dll”

2、PHP程序使用MemCache应用程序接口的方法实例

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
<?php
    //实例化得到memcache对象
    $mem = new Memcache();

    //连接memcached服务器
    $mem->connect('127.0.0.1',11211);

    //赋值
    $mem->set('name','jack',2,1000);

    //取值
    echo $mem->get('name');

结果输出:jack

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
	//得到memcache对象
	$mem = new Memcache();

	//连接
	$mem->connect('127.0.0.1', 11211);

	$list = array('name'=>'jack', 'age'=>18);

	//赋值   存进去是什么样子,读取出来就是什么样
	$mem->set('list', $list);

	//取值
	$res = $mem->get('list');

	echo '<pre>';
	    print_r($res);
	echo '</pre>';

输出结果如下:

从memcached服务器中获取数据

分布式memcached服务器

Select Code
1
2
3
4
//添加多台服务器
$mem->addServer('192.168.12.6',11211);
$mem->addServer('192.168.12.251',11211);
$mem->addServer('192.168.12.25',11211);

五、MemCache的实例应用
1、从数据库读取用户表的PHP代码

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
$mem = new Memcache();
$mem->connect('127.0.0.1', 11211);

$sql = "select id, username, password, addtime from shop_user";

$fileName = md5($sql);

// 从memcached服务器获取值
$userlist = $mem->get($fileName);

if (empty($userlist)){

    $link = mysqli_connect('127.0.0.1','root', '', 'ishop');
    mysqli_set_charset($link,'utf8');

    sleep(3);
    $res = mysqli_query($link, $sql);

    if ($res) {
        while ($row = mysqli_fetch_assoc($res)) {
            $userlist[] = $row;
        }
    }

    // bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] )
    // 向memcached中设置值,设置失效时间是10s
    $mem->set($fileName, $userlist, 2, 10);
}

/*
key 
要设置值的key。 
var 
要存储的值,字符串和数值直接存储,其他类型序列化后存储。 
flag 
使用 MEMCACHE_COMPRESSED 指定对值进行压缩(使用zlib)。 
expire 
当前写入缓存的数据的失效时间。
*/

?>

2、HTML的数据展示代码

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<table width="600" border="1" align="center">
<caption><h2>用户列表</h2></caption>
<tr>
    <th>ID</th>
    <th>UserName</th>
    <th>Password</th>
    <th>AddTime</th>
</tr>
<?php foreach($userlist as $v): ?>
<tr>
    <td><?php echo $v['id']; ?></td>
    <td><?php echo $v['username']; ?></td>
    <td><?php echo $v['password']; ?></td>
    <td><?php echo $v['addtime']; ?></td>
</tr>
<?php endforeach; ?>
</table>

六、代码解释:

1、第一次访问时,$userlist数据为空,因此会读取数据库操作,查询的结果会同时存储到memcached中,$mem->set($fileName, $userlist, 2, 10); 并且设置了失效的时间为10s。

2、$userlist只要没有失效,那么访问该页面,就会通过$userlist = $mem->get($fileName);来获取存储在memcached中的查询结果,而不直接访问数据库。这样读取的速度就会很快。

3、当缓存失效后,再读取数据库中的最新数据。

memcached_案例展示