原文地址:http://www.2cto.com/kf/201503/384967.html
如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么提高网站访问速度,减少对数据库的操作;作为PHP开发人员,我们一般能想到的方法有页面静态化处理、防盗链、CDN内容分发加速访问、MySQL数据库优化建立索引、架设apache服务器集群()、还有就是现在流行的各种分布式缓存技术:如memcached/Redis;
1.什么是Memcached?
a.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
b.Memcached的键key一般是字符串,该值不能重复;value可以放入字符串、数组、数值、对象、布尔,二进制数据和图片视频
c.Memcached默认服务端口是11211
2.PHP使用Memcached步骤
<1>准备:下载Memcached服务安装包:memcached-1.2.6-win32-bin.7z和访问Memcached服务的dll库:php_memcache.dll
www.memcached.org(官网进不去好像,可以从其他地方下载)
<2>解压包memcached-1.2.6-win32-bin.7z(可以解压完复制放到web服务器同级目录),然后操作cmd,进入到刚才解压的目录用命令安装:memcached.exe -d install
<3>安装完(判断是否安装完毕可以到服务列表里面查看是否有memcached服务),然后cmd用命令启动:memcached.exe -d start
具体操作如下:
<4>启动完memcached服务后,再把下载的php_memcache.dll放到web服务器php5目录下的ext目录下
<5>在php.ini里面修改,加载扩展库php_memcache.dll,然后重启apache服务器
<6>开始实践,memcached主要有crud操作(即创建、读取、更新、删除值操作,具体可以查阅手册),下面弄个简单的设置值,然后读取值的操作
a.设置值页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!--?php
header(
"Content-type:text/html;charset=utf-8"
);
//创建Memcache对象
$mem =
new
Memcache();
//连接Memcache服务器
if
(!$mem--->connect(
"127.0.0.1"
)) {
echo
"连接Memcache服务器失败!"
;
}
//设置,'myword'参数代表键key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒
if
($mem->set(
'myword'
,
'hello world'
,MEMCACHE_COMPRESSED,
50
))
{
echo
"设置值成功!"
;
}
?>
|
注:如果值在内存存放的时间要超过30天,要用时间戳来设置100天:如time()+3600*24*100;设置0则表示永不过期
b.读取值页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<!--?php
header(
"Content-type:text/html;charset=utf-8"
);
$mem =
new
Memcache();
if
(!$mem--->connect(
"127.0.0.1"
)) {
echo
"连接Memcache服务器失败!"
;
}
//读取键myword值
$value = $mem->get(
'myword'
);
if
(!$value)
{
echo
"读取失败!"
;
}
else
{
echo
"读取的值="
.$value;
}
|
c.删除、更新例子:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
<!--?php
header(
"Content-type:text/html;charset=utf-8"
);
//创建Memcache对象
$mem =
new
Memcache();
//连接Memcache服务器
if
(!$mem--->connect(
"127.0.0.1"
)) {
echo
"连接Memcache服务器失败!"
;
}
//设置,'myword'参数代表键key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒
if
($mem->set(
'myword'
,
'hello world'
,MEMCACHE_COMPRESSED,
50
))
{
echo
"设置值成功!"
;
}
//读取键myword值
$value = $mem->get(
'myword'
);
if
(!$value)
{
echo
"读取失败!"
;
}
else
{
echo
"读取的值="
.$value;
}
//更新键值
$mem->replace(
'myword'
,
'hello everybody!'
);
$value = $mem->get(
'myword'
);
if
(!$value)
{
echo
"读取失败!"
;
}
else
{
echo
"读取的值="
.$value;
}
//删除键myword值
$mem->delete(
'myword'
);
$value = $mem->get(
'myword'
);
if
(!$value)
{
echo
"读取失败!"
;
}
else
{
echo
"读取的值="
.$value;
}
//关闭
$mem->close();
?>
|
注:mem对象下还有许多方法,可以通过翻阅手册了解。
<7>多个memcached服务器设置,其实就比一个memcached服务器改变一点点,就是把多个memcached的服务器通过方法addserver添加到连接池中,这样设置完后,crud操作时,内部就会通过相应算法均衡连接相应服务器并执行相应操作中。
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
|
<!--?php
header(
"Content-type:text/html;charset=utf-8"
);
//创建Memcache对象
$mem =
new
Memcache();
//添加多台memcached服务器
$mem--->addserver(
'192.168.0.1'
,
11211
);
$mem->addserver(
'192.168.0.2'
,
11211
);
$mem->addserver(
'192.168.0.3'
,
11211
);
$mem->addserver(
'192.168.0.4'
,
11211
);
//设置,'myword'参数代表键key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒
if
($mem->set(
'myword'
,
'hello world'
,MEMCACHE_COMPRESSED,
50
))
{
echo
"设置值成功!"
;
}
//读取键myword值
$value = $mem->get(
'myword'
);
if
(!$value)
{
echo
"读取失败!"
;
}
else
{
echo
"读取的值="
.$value;
}
|