统一Redis操作类

来自技术开发小组内部wiki
跳转至: 导航搜索

开发说明

在经过一次redis的升级后,发现目前在前后台代码中有很多不同的redis类库调用,每个封装的方法也不一致,给后续维护带来了很多的不便,现统一编写一个统一调用类,在后续开发中
必须强制使用

适用范围

目前只在前后台代码中(fmb.dianping fmb.admin)进行了代码封装,其他代码库中的封装可以参照进行

实现过程

在config目录中新增了统一配置信息
<source lang='php'>

//redis统一配置 $config['redis_config'] = array(

   'host'     => "192.168.0.2",
   'port'     => 6379,
   'pass'      =>fmb_decode('TDlSUVFpcktPOWRp'),

); </source>

在libraries中新增了Redis类,该类的主要意图是从phpredis扩展中的Redis类继承,封装了连接参数,只需要实现特殊定制方法,其他原生方法就只需调用即可,无需一一对应方法编写
原生redis扩展提供的方法参考:http://www.cnblogs.com/zcy_soft/archive/2012/09/21/2697006.html

<source lang='php'> <?php // /////////////////////////////////////////////////// // Copyright(c) 2016,父母邦,帮父母 // 日 期:2016年11月18日 // 作 者:卢少锦 // E-mail :shaojin.lu@fumubang.com // 文件名 :Redis.php // 创建时间:上午10:54:46 // 编 码:UTF-8 // 摘 要:统一一份redis调用与执行,通过从扩展的Redis类继承 // ///////////////////////////////////////////////////

class CI_Redis extends Redis{

   /**
    * 构造函数,从扩展类进行继承
    */
   public function __construct(){
       parent::__construct();
       //引入CI对象
       $CI = & get_instance();
       $config = $CI->config->item('redis_config');
       $host   = $config['host'];//主机
       $port   = $config['port'];//端口号
       $pass   = $config['pass'];//授权密码
       parent::connect($host,$port);
       if(!empty($pass)){
           //如果有授权机制就需要启动
           parent::auth($pass);
       }
   }
   
   //select操作采用最原始的方法设置
   
   //本身提供的方法如下:
   //参考地址:http://www.cnblogs.com/zcy_soft/archive/2012/09/21/2697006.html
   
   /**
    * 封装一个app消息推送统一发送接口
    * @param array $msgbody
    */
   public function app_msg_push($msgbody=array()){
       $this->select(1);//确保与处理的通道一致
       //消息编码
       $msgcontent=rawurlencode(json_encode($msgbody));
       $this->lpush("msg_queue_list","app_msg-push-".$msgcontent);
   }
   
   /**
    * 一个统一的推送消息的方法
    * @param string $controller 控制器名
    * @param string $method     方法名
    * @param array $msgbody     消息体
    */
   public function to_push_msg($controller="",$method="",$msgbody=array()){
       $this->select(1);//确保与处理的通道一致
       //消息编码
       $msgcontent=rawurlencode(json_encode($msgbody));
       $this->lpush("msg_queue_list",$controller."-".$method."-".$msgcontent);
   }

} ?> </source>

调用方法

<source lang='php'> $this->load->library("redis",null,"redis"); $this->redis->select(1);//如果需要设定使用的库,就需要加上这行代码 $this->redis->set("test","xxxx"); print_r($this->redis->get("test")."\n"); //其他的原生调用方法就只需要这么弄就行,$this->redis->原生方法 </source>