最近需要做php缓存,Memcache无疑是个不错选择.在Windows和Linux下安装方式差不多,都是需要装服务端与客户端(这里的客户端可以理解为PHP的可以调用的扩展,而不是用户=.=||,而服务端是作为服务来运行的,所有数据缓存的建立,存储,删除实际上都是在这里完成的).

Windows下

1.把memcached.zip解压到一个目录下,然后管理员身份运行memcached.exe -d -install

2.同样管理员身份执行memcached.exe -d start

3.这样就安装完成了.然后就是下载并引用php_memcache.dll与修改php.ini了:
加入一行 ‘extension=php_memcache.dll’
PS:如果使用一键环境包,如phpstudy,只需在phpstudy的php扩展里勾选Memcache,它已经集成了php_memcache.dll的.

4.重新启动Apache.

5.在php里加入这两行调用:

1
2
$mem = new Memcache; //创建Memcache对象
$mem->connect("127.0.0.1", 11211); //连接Memcache服务器,11211是默认端口


Ubuntu下

1.安装Memcache服务端

1
sudo apt-get install memcached

2.安装完Memcache服务端以后,我们需要启动该服务:

1
memcached -d -m 128 -p 11211 -u root

3.安装Memcache客户端

1
sudo apt-get install php5-memcache

4.打开/etc/php5/apache2/php.ini,在php.ini里进行简单的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[Memcache]

; 一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,
; 它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

; 是否在遇到错误时透明地向其他服务器进行故障转移。
memcache.allow_failover = On

; 接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。memcache.max_failover_attempts = 20

; 数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。
; 如果发现无法解释的速度降低,可以尝试将此值增加到32768。
memcache.chunk_size = 8192

; 连接到memcached服务器时使用的默认TCP端口。
memcache.default_port = 11111

; 控制将key映射到server的策略。默认值”standard”表示使用先前版本的老hash策略。
; 设为”consistent”可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。
;memcache.hash_strategy = “standard”; 控制将key映射到server的散列函数。默认值”crc32″使用CRC32算法,而”fnv”则表示使用FNV-1a算法。
; FNV-1a比CRC32速度稍低,但是散列效果更好。
;memcache.hash_function = “crc32″

5.重启Apache:

1
sudo /etc/init.d/apache2 restart

6.php中简单调用Memcache:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$mem = new Memcache; //创建Memcache对象
$mem->connect("127.0.0.1", 11211); //连接Memcache服务器

$key = "sss";//键名
$val = “啦啦啦.”;//键值

$mem->set($key, $val, 0, 120); //增加插入一条缓存,缓存时间为120s

if(($k = $mem->get(’sss’))){ //判断是否获取到指定的key
echo ‘from cache:’.$k;
} else {
echo ‘normal’; //这里我们在实际使用中就需要替换成查询数据库并创建缓存.
}
?>

当然也可行封装到函数里调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function MyMemCache($mem,$key,$CacheTime)
{

if(($value = $mem->get($key))){ //判断是否获取到指定的key
return $value;
}
else {
$value1="";//耗时的sql查询等
$value2="";
//....
$value=array($value1,$value2,...);
$mem->set($key,$value,0,$CacheTime);//添加一个数组
return $value;
}
}

Memcache最好还是以数组的方式缓存以提高效率.

当然,还可以封装成类进行操作,详见这里:
Memcache 操作PHP类


另附:php5-memcache扩展提供的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Memcache::add — 添加一个值,如果已经存在,则返回false
Memcache::addServer — 添加一个可供使用的服务器地址
Memcache::close — 关闭一个Memcache对象
Memcache::connect — 创建一个Memcache对象
memcache_debug — 控制调试功能
Memcache::decrement — 对保存的某个key中的值进行减法操作
Memcache::delete — 删除一个key值
Memcache::flush — 清除所有缓存的数据
Memcache::get — 获取一个key值
Memcache::getExtendedStats — 获取进程池中所有进程的运行系统统计
Memcache::getServerStatus — 获取运行服务器的参数
Memcache::getStats — 返回服务器的一些运行统计信息
Memcache::getVersion — 返回运行的Memcache的版本信息
Memcache::increment — 对保存的某个key中的值进行加法操作
Memcache::pconnect — 创建一个Memcache的持久连接对象
Memcache::replace — R对一个已有的key进行覆写操作
Memcache::set — 添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold — 对大于某一大小的数据进行压缩
Memcache::setServerParams — 在运行时修改服务器的参数

参考链接:
Ubuntu下Memcache的安装与基本使用

Windows下的Memcache安装