封装一个Memcache类

封装Memcache类需有以下3点:

1.扩展性
2.可调式
3.尽量简便的操作,一个方法多种可能

接下来,上代码:

index.php
<?php

//实现下面这三个功能
//set  $m->s($key,$value,$time)
//get  $m->s($key)
//delete  $m->s($key,NULL)

include  'memcached.class.php';

$m  =   new   Mem();
$server  =  array(
                array('127.0.0.1',11211),
                );
$m->addServer($server);
$m->s('test','testvalue',0);
echo  $m->s('test');
echo  '<br />';
$m->s('test',NULL);

echo  $m->s('test');
?>

//类文件
memcached.class.php
<?php
class  Mem
{
                private   $type  =  'Memcached';
                private   $m;
                private   $time  = 0;
                private   $error;
                private   $debug = 'true';
                public  function  __construct()
                {
                            if(!class_exists($this->type)){
                                        $this->error  =  'No  ' . $this->type;
                                        return  false;
                            } else {
                                        $this->m =  new  $this->type;
                            }
                }

                public   function  addServer($arr)
                {
                            $this->m->addServers($arr);
                }

                public   function  s($key,$value=' ',$time = NULL)
                {
                            $number = func_num_args();
                            if($number == 1)
                            {
                                        //get
                                        return  $this->get($key);
                            }else  if($number  >= 2){
                                        if($value === NULL){
                                                    //delete
                                                    $this->delete($key);
                                        }else{
                                                    //set
                                                    $this->set($key,$value,$time);
                                        }
                            }
                }

                //set
                private  function  set($key,$value,$time=NULL)
                {
                            if($time === NULL){
                                        $time  =  $this->time;
                            }
                            $this->m->set($key,$value,$time);
                            if($this->debug){
                                        if($this->m->getResultCode()   !=  0){
                                                    return false;
                                        }
                            }
                }

                //get
                private   function   get($key)
                {
                            $return  =  $this->m->get($key);
                            if($this->debug){
                                        if($this->m->getResultCode()  != 0){
                                                    return  false;
                                        }else{
                                                    return  $return;
                                        }
                                }else{
                                        return  $return;
                            }
                }

                //delete
                private  function  delete($key)
                {
                            $this->m->delete($key);
                }

                public  function  getError()
                {
                            if($this->error){
                                            return    $this->error;
                            }else{
                                            return   $this->m->getResultMessage();
                            }
                }
}

在项目中使用Memcache

1.即时生成缓存(用于新闻,详情页)
2.提前生成缓存(数据量比较大,访问量也大时,当访问量小时,可以从内存中剔除掉,重新生成)
3.永久缓存(用于单独一个页面)

最后注意事项:

1.不要在单机模式中使用Memcached
2.不要只使用Memcache保存重要数据
3.定期查看缓存的分布状况和击中情况

猜你喜欢

转载自blog.51cto.com/bin06/2646117
今日推荐