在Web系统中应用MemCache缓存技术,必须使用客户端API(PHP)进行访问,这样才能将用户请求的动态数据,缓存到memcached服务器中,来减少对数据库的访问压力。PHP中提供了用于内存缓存的过程式程序和面向对象两种方便的应用接口。
1、 安装memcached扩展方式请自行百度
2、 面向对象接口的应用
(1)、连接和关闭memcached服务器
<?php
//实例化Memcachele类的对象
$mem =newMemcache;
//通过 $mem中的connect()方法连接到指定位置的指定端口
$mem -> connect("127.0.0.1",11211);
//关闭对象(对常连接不起作用)
$mem -> close();
?>
(2)、连接memcached服务器以后,就可以添加一个要缓存的数据(add),或设置一个指定key的缓存变量内容(set),以及可以替换一个指定已存在 key的缓存变量(replace)。可以通过MemCache类对象中的add()、set()、replace()三个函数来完成,格式如下:
boolMemcache::add (string $key , mixed $var [,int $flag [,int $expire ]]) //添加一个要缓存的数据
boolMemcache::set(string $key , mixed $var [,int $flag [,int $expire ]]) //设置一个指定key的缓存变量内容
boolMemcache::replace (string $key , mixed $var [,int $flag [,int $expire ]]) //替换一个指定已存在key的缓存变量内容
这三个方法的语法格式相同,都需要4个参数:
第一个参数$key:必选项,用于设置缓存数据的键,其长度不能超过250个字符;
第二个参数$var:必选项,用于设置缓存的值,整形将直接存储,其他类型将被序列化存储,其最大值为1M;
第三个参数$flag:可选项,即是否使用zlib压缩,当使用MEMCACHE_COMPRESSED时,数据很小时不会采用zlib压缩,只有数据到达一定大小才对数据进行zlib压缩;
第四个参数$expire:当前写入缓存的数据的失效时间。如果此值设置为0表明此数据永不过期。你可以设置一个UNIX时间戳或 以秒为单位的整数(从当前算起的时间差)来说明此数据的过期时间,但是在后一种设置方式中,不能超过 2592000秒(30天)。
<?php
//实例化Memcachele类的对象
$mem =newMemcache;
//通过 $mem中的connect()方法连接到指定位置的指定端口
$mem -> connect("127.0.0.1",11211);
//向本机服务器中添加一组数据
$mem -> add("mystr","this is a memcache test",MEMCACHE_COMPRESSED,3600);
//关闭对象(对常连接不起作用)
$mem -> close();
?>
(3)、从memcached服务器中获取和删除数据
可以添加和修改缓存数据,当然也可以获取和删除memcached服务器中存在的缓存数据。格式如下所示:
stringMemcache::get(string $key [,int&$flags ]) //获取一个key的变量缓存值
array Memcache::get( array $keys [, array &$flags ]) //获取多个key的变量缓存多个值
该方法有两种:一种是通过第一个必选参数,并使用一个字符串的key,从memcached服务器中返回缓存的指定key的变量内容,如果获取失败或该变量的值不存在,则返回FALSE;另一种是在第一个必选参数中使用一个数组,在数组中使用多个key,就可以获得每个key对应的多个值。如果传入的key的数组中的key都不存在,则返回的结果是一个空数组,反之则返回key与缓存值相关联的关联数组,关联数组的下标为每个key名。
<?php
//实例化Memcachele类的对象
$mem =newMemcache;
//通过 $mem中的connect()方法连接到指定位置的指定端口
$mem -> connect("127.0.0.1",11211);
//向本机服务器中添加一组数据
$mem -> add("mystr1","this is a memcache test",MEMCACHE_COMPRESSED,3600);
$mem -> add("mystr2","hello world",MEMCACHE_COMPRESSED,3600);
$var1 = $mem ->get(‘mystr1‘);
var_dump($var1);
$var2 = $mem ->get(array(‘mystr1‘,‘mystr2‘));
var_dump($var2);
//关闭对象(对常连接不起作用)
$mem -> close();
?>
删除数据:
boolMemcache::delete(string $key [,int $timeout =0])//通过key删除一个元素。 如果参数timeout指定,该元素会在timeout秒后失效。
boolMemcache::flush (void)//立即使所有已经存在的元素失效。