memcached是一种被广泛应用的缓存技术,同时还支持分布式,现在在php开发用的也很多,java的话一般用oscache,Ehcache之类的。memcached一般是作为服务安装的现在这个memcached的windows版本很难找到下载的地方了,为了方便后面我会把软件上传到资源。
1.安装mecached服务
先把exe文件放到一个不带中文路径的文件夹里,接下来打开命令行窗口,进入到放有exe文件的目录
安装命令:memcached.exe -d install
启动命令:memcached.exe -d start
停止命令:memcached.exe -d stop
如下图所示:
下面是命令行
上面的做法在xp系统完全没有问题,但是如果是win7就要注意了,打开命令行必须使用管理员身份
2.操作memcache
该服务可以使用telnet来操作,还能通过java,php,c#等客户端来操作,这里介绍的是使用php扩展库来操作memcached
(1)下载php的memcached扩展库php_memcache.dll,名称可能不一样,之后放到php环境的ext文件夹里,需要注意点是版本要对应
(2)在php.ini文件里加这么一句
extension=php_memcache.dll
之后启动或重启apache,为了保险起见应该先用phpinfo()看看扩展是否已经启用了
(3)php连接memcached服务并缓存数据
<?php
require_once 'User.php';
//创建memcache对象
$mem=new Memcache();
//连接memcached,11211是端口号
if(!$mem->connect("127.0.0.1",11211)){
die("连接mem失败");
}
//把字符串放入缓存
$mem->set("testdata1", "上海市浦东新区川沙新镇",MEMCACHE_COMPRESSED,120);
//把对象存入缓存
$u=new User("张学友", "123456");
$mem->set("userInfo", $u,MEMCACHE_COMPRESSED,120);
//把boolean值放入缓存
$mem->set("bool", true,MEMCACHE_COMPRESSED,120);
//把数值类型放入缓存
$mem->set("num", 1.2,MEMCACHE_COMPRESSED,120);
//把关联数组放入缓存
$mem->set("arr", array(array("city"=>"上海市","area1"=>"浦东新区","area2"=>"徐汇区"),array("city"=>"昆明市","area1"=>"盘龙区","area2"=>"五华区")),MEMCACHE_COMPRESSED,120);
?>
MEMCACHE_COMPRESSED表示启用压缩缓存,写成0表示不压缩,我们可以看到memcache能缓存不同的数据类型,但是资源类型不能被缓存,顺便把User这个php也贴出来
<?php
class User {
public $username;
public $password;
public function __construct($username,$password){
$this->username=$username;
$this->password=$password;
}
/**
* @return the $username
*/
public function getUsername() {
return $this->username;
}
/**
* @return the $password
*/
public function getPassword() {
return $this->password;
}
/**
* @param field_type $username
*/
public function setUsername($username) {
$this->username = $username;
}
/**
* @param field_type $password
*/
public function setPassword($password) {
$this->password = $password;
}
}
?>
尤其需要注意的set里面的最后一个参数,这个参数表示数据什么时候过期,类型为数值单位是秒但是秒数不能超过30天也就是30*3600*24,如果数据缓存时间超过30天
应该写成time()+秒数
(4)获取缓存数据
<?php
require_once 'User.php';
//创建memcache对象
$mem=new Memcache();
//连接memcached
if(!$mem->connect("127.0.0.1",11211)){
die("连接mem失败");
}
//从缓存中取出数据
$data=$mem->get("testdata1");
echo $data."<br/>";
$user=$mem->get("userInfo");
echo $user->getUsername();
echo "<br/>=======取得布尔值=======<br/>";
$bool=$mem->get("bool");
echo $bool;
echo "<br/>=======取得数字=======<br/>";
$num=$mem->get("num");
echo $num;
echo "<br/>=======取得二维数组=======<br/>";
$arr=$mem->get("arr");
foreach ($arr as $key=>$val){
foreach ($val as $key2=>$val2){
echo "$key2:$val2<br/>";
}
}
?>
这里唯一特殊点的就是获取对象的情况,这里要先把User对象引入进来才可以
(5)修改缓存数据
这里有2个方法,一个是set,一个是replace,使用replace如果缓存里没有对应的key值那么就会报错,如果使用set缓存里有就修改没有就创建
<?php
$mem=new Memcache();
//连接memcached
if(!$mem->connect("127.0.0.1",11211)){
die("连接mem失败");
}
$mem->replace("testdata1", "上海市徐汇区");
?>
(6)删除缓存数据
如果删除单个直接使用delete就行,删除全部就使用flush
<?php
$mem=new Memcache();
//连接memcached
if(!$mem->connect("127.0.0.1",11211)){
die("连接mem失败");
}
//删除单个数据
//$mem->delete("testdata1");
//删除mem里的全部数据
$mem->flush();
?>
是不是都特别简单呢
