zoukankan      html  css  js  c++  java
  • 写一个Redis封装类

    打算自己封装一个Redis操作类,方便使用,且有一定log记录。
    Redis的封装思路:
    基于Redis类进一步封装


    一般属性

    单例 (配置参数从配置文件中读取还是写死?考虑多配置之间切换)

    常规操作根据业务单独处理。(注意健壮性和容错)

    目的不同,可能做的封装也同。
    我们要基于业务做一些抽象程度较低的封装,也会根据需要,做一些tool级别的高抽象的封装。如果抽象的足够高,可以让通用性变得更好。
    这次封装Redis,我先做一个通用性的Redis操作类,先仅作最基本的一些操作。

    代码如下:

    <?php
    /**
     * Created by PhpStorm.
     * User: freephp
     * Date: 2016/1/4
     * Time: 11:09
     */
    
    class MyRedis extends Redis {
    
        public static $instance = null;  // 单例对象
    
        public $isConnect = false; // 判断redis是否链接成功
    
        public $connectMsg = ''; // redis链接信息
    
        public $date = null; // log记录日期
    
        private $config = [
            //主(master)服务器
            'master' => [
                'hostname' => '192.168.1.223',
                'password' => 'sewerew',
                'port' => '6379',
                'timeout' => '5',
            ],
            //从(slave)服务器
            'slave' => [
                'hostname' => '192.168.1.230',
                'password' => 'qweqq',
                'port' => '6379',
                'timeout' => '5',
            ]
        ];
    
        function __construct($params = array()) {
            parent::__construct();
            $serverArray = $this->config;
    
            //组装参数
            $hostname = $serverArray['master']['hostname']; //连接地址
            $password = $serverArray['master']['password']; //密码
            $port = $serverArray['master']['port']; //端口
            $timeout = $serverArray['master']['timeout']; //超时
            //选择用户指定的主机和数据库
            if (isset($params['redis']) && array_key_exists($params['redis'], $serverArray)) {
                $hostname = $serverArray[$params['redis']]['hostname']; //连接地址
                $password = $serverArray[$params['redis']]['password']; //密码
                $port = $serverArray[$params['redis']]['port']; //端口
                $timeout = $serverArray[$params['redis']]['timeout']; //超时
            }
            $this->date = date('Y-m-d', time());
    
            $this->_connect($hostname, $port, $timeout, $password);
        }
    
        /**
         *  连接数据库
         *
         * @param string $hostname  主机地址
         * @param int    $port      redis端口
         * @param int    $timeout   超时时间默认30s
         * @param string $password  验证密码
         * @param bool   $isPConnect  是否长连接:默认false非长连接
         * @return bool               返回值:成功返回true,失败false
         */
        private function _connect($hostname, $port = 6379, $timeout = 5, $password = '', $isPConnect = false) {
            //开始连接数据库
            try {
                if ($isPConnect == false) {
                    $status = $this->connect($hostname, $port, $timeout);
                } else {
                    $status = $this->pconnect($hostname, $port, $timeout);
                }
    
                if (!$status) {
                    error_log(date('Y-m-d H:i:s') . ":" . 'redis connect error' . "	",3, "./application/logs/redis-error-{$this->date}.log");
                    return $this->response(false, 'redis connect error');
                }
            } catch (Exception $e) {
                error_log(date('Y-m-d H:i:s') . ":" . $e->getMessage() . "	",3, "./application/logs/redis-error-{$this->date}.log");
                return $this->response(false, $e->getMessage());
            }
    
            //验证密码
            if ($password && !$this->auth($password)) {
                error_log(date('Y-m-d H:i:s') . ":" . 'redis password error' . "	",3, "./application/logs/redis-error-{$this->date}.log");
                return $this->response(false, 'redis password error');
            }
    
            return $this->response(true, 'redis connect success');
        }
    
    
        public static function getInstance($params = array(), $flag = false) {
            if (!(self::$instance instanceof self) || $flag) {
                self::$instance = new self($params = array());
            }
            return self::$instance;
        }
    
        /**
         * 返回消息
         *
         * @param  bool   $status   状态
         * @param  string $msg      消息
         * @return void
         */
        private function response($status = false, $msg = '') {
            $this->isConnect = $status; //判断redis是否连接成功
            $this->connectMsg = $msg;  //连接redis的消息通知
            return $status;
        }
    
    }
    
    // 调用
    $myredis = new MyRedis(); var_dump($myredis->connectMsg);die();

     我们基于更详细业务做的其他封装类可以使用这个MyRedis作为一个注入类,多用组合,实现解耦。

  • 相关阅读:
    【Hadoop 分布式部署 五:分布式部署之分发、基本测试及监控】
    【Hadoop 分布式部署 四:配置Hadoop 2.x 中主节点(NN和RM)到从节点的SSH无密码登录】
    【Hadoop 分布式部署 三:基于Hadoop 2.x 伪分布式部署进行修改配置文件】
    【Hadoop 分布式部署 二:分布式环境预备工作(主机名 IP地址等设置)】
    【Hadoop 分布式部署 一 :分布式部署准备虚拟机 】
    Java基础 【类之间的关系】
    Java基础 【自动装箱和拆箱、面试题】
    java算法 第七届 蓝桥杯B组(题+答案) 3.凑算式
    java算法 第七届 蓝桥杯B组(题+答案) 2.生日蜡烛
    java算法 第七届 蓝桥杯B组(题+答案) 1.煤球数目
  • 原文地址:https://www.cnblogs.com/freephp/p/5098259.html
Copyright © 2011-2022 走看看