memcache在各种语言中的使用都是很简单的,例如在php中就有memcache和memcached两个封装类,在java中也有封装好的MemCachedClient类,还有更多的方法操作memcache。最近在做php的项目,所以暂时就写下php中的memcache吧。
首先,我们自己封装一个mc类,以备后续需求:
class mc {
private $m;
private $host;
private $port;
private $expire;
public function __construct() {
$this->host = MEMCACHED_HOST;
$this->port = MEMCACHED_PORT;
$this->expire = MEMCACHED_EXPIRE;
$this->m = new Memcache();
$r = $this->m->connect($this->host, $this->port);
}
public function __destruct() {
$this->m->close();
}
public function get($key) {
return $this->m->get($key);
}
public function set ($key , $val , $expire = 0) {
if($expire > 0){
$this->m->set($key,$val,0,$expire);
}else
$this->m->set($key,$val,0,$this->expire);
}
public function del ($key) {
$this->m->delete($key,0);
}
public function append($key, $value){
$this->m->append($key,$value);
}
}
if (!class_exists("Memcache")) {
class Memcache {
public function connect ($host,$port) {
return false;
}
public function set ($key,$val,$t,$expire) {
}
public function get ($key) {
return false;
}
public function close () {
}
}
}
这里说两点:1,$this->m->delete($key,0)如果没有这个0,可能会失败;2,之前在未安装memcache扩展情况下就调用了这个类,致使出错,所以有了if (!class_exists("Memcache")) {···}这段代码。
有了这个类,当memcache服务器开启时,就可以直接将一些数据缓存到memcache中(set方法),读的时候也可以优先从memcache中读取(get方法)。
总的来说,memcache的是用是很方便的,单次操作时间能提升十倍以上,用apache的ab测试工具并发数也有很大提升。
再说一下centOS中memcache扩展的安装。
先下载文件:wget -c http://pecl.php.net/get/memcache-3.0.8.tgz
解压:tar -zxvf memcache-3.0.8.tgz
cd到解压目录:cd memcache-3.0.8
执行phpize:/usr/local/php/bin/phpize
执行:./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache --with-zlib-dir
安装:make && make install
这样,如果安装成功的话会给出so文件的路径,cd到此路径中就可以看到so文件,再讲这个文件添加到php.ini文件中,即添加一行extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so,最后重启php即可在phpinfo中看到memcache扩展!