zoukankan      html  css  js  c++  java
  • redis操作封装类

    class Redis {
        // 默认配置名称(使用load_config加载)
    private $_default_config_path = 'package/cache/redis';

        // redis实例对象
        private $_redis;

        // redis服务器地址
        private $_host = '';
        // redis服务器端口
        private $_port = 6379;
        
        /**
         * 构造函数
         *
         * @access public
         * @param array $conf 配置文件集合, 包含参数:
         *              string $host 服务器地址
         *              string $port 服务器端口
         * @return void
         */
        public function __construct(array $conf=array()) {
            $this -> set_conf($conf);
            $this -> reconnect(true);
        }

        /**
         * 设置redis配置
         * 执行前,配置会被重置为[host='', port='6379']
         *
         * @access public
         * @param array $conf 配置文件集合, 包含参数:
         *              string $host 服务器地址
         *              string $port 服务器端口
         * @return void
         */
        public function set_conf(array $conf=array()) {
            if (empty($conf)) {
                $conf = load_config($this -> _default_config_path);
    if (!is_array($conf) or empty($conf)) {
    to_log(MAIN_LOG_ERROR, '', __CLASS__ . ':' . __FUNCTION__ . ': 默认配置为空');
    return;
    }
            }

            $this -> _host = '';
            $this -> _port = 6379;

            isset($conf['host']) and $this -> _host = $conf['host'];
            isset($conf['port']) and $this -> _port = intval($conf['port']);
        }
        
        /**
         * 重新连接redis
         *
         * @access public
         * @param boolean $is_new 是否必须重新连接
         * @return boolean
         */
        public function reconnect($is_new=false) {
            $ret = false;
            if ($is_new) {
                $ret = $this -> _connect();
                return $ret;
            }

            $check = $this -> _is_connected();
            if (!$check) {
                $ret = $this -> _connect();
            }

            return $ret;
        }
        
        /**
         * 设置缓存数据, 仅支持字符串
         *
         * @access public
         * @param string $key 缓存变量名
         * @param string $value 缓存变量值
         * @param string $ttl 缓存生存时间,单位:秒
         * @return boolean
         */
        public function set($key, $value, $ttl=3600) {
            $key = strval($key);
            $value = strval($value);
            $ttl = intval($ttl);

            $ttl < 0 and $ttl = 0;

            if ($key === '' or $value === '') {
                return false;
            }
            
            try {
                $result = $this -> _redis -> setex($key, $ttl, $value);
            }catch (RedisException $e) {
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }

            return $result ? true : false;
        }

        /**
         * 重新设置缓存变量的生存时间
         *
         * @access public
         * @param string $key 缓存变量名
         * @param string $ttl 缓存生存时间,单位:秒
         * @return boolean
         */
        public function expire($key, $ttl=3600) {
            $key = strval($key);
            $ttl = intval($ttl);

            $ttl < 0 and $ttl = 0;

            if ($key === '') {
                return false;
            }
            
            try {
                $result = $this -> _redis -> expire($key, $ttl);
            }catch (RedisException $e) {
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }

            return $result ? true : false;
        }

        /**
         * 获取缓存变量值
         *
         * @access public
         * @param string $key 缓存变量名
         * @return mixed 成功返回变量值,失败返回false
         */
        public function get($key) {
            $key = strval($key);
            if ($key === '') {
                return false;
            }

            try {
                $result = $this -> _redis -> get($key);
            }catch (RedisException $e) {
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }
            return $result;
        }
        
        /**
         * 批量删除缓存变量
         *
         * @access public
         * @param mixed $key [string|array] 当为string时,自动转换为array
         * @return boolean
         */
        public function delete($key) {
            !is_array($key) and $key = array($key);

            $tmp_arr = array();
            foreach ($key as $val) {
                $tmp_str = strval($val);
                $tmp_str !== '' and $tmp_arr[$tmp_str] = 1;
            }
            $key = array_keys($tmp_arr);

            try {
                $ret = true;
                foreach ($key as $val) {
                    $result = $this -> _redis -> delete($val);
                    !$result and $ret = false;
                }
            }catch(RedisException $e) {
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }
            
            return $ret;
        }
        
        /**
         * 清空redis中的所有数据
         *
         * @access public
         * @return boolean
         */
        public function clear() {
            try {
                $result = $this -> _redis -> flushAll();
            }catch(RedisException $e){
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }

            return $result ? true : false;
        }
        
        /**
         * 将缓存变量放入redis队列,仅支持字符串及整型
         *
         * @access public
         * @param string $key 缓存变量名
         * @param string $value 缓存变量值
         * @param boolean $to_right 是否从右边入列
         * @return boolean
         */
        public function push($key, $value, $to_right=true) {
            $key = strval($key);
            $value = strval($value);
            
            if ($key === '' or $value === '') {
                return false;
            }
            
            $func = 'rPush';
            !$to_right and $func = 'lPush';

            try {
                $result = $this -> _redis -> $func($key, $value);
            }catch (RedisException $e) {
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }

            return $result ? true : false;
        }

        /**
         * 缓存变量出列
         *
         * @access public
         * @param string $key 缓存变量名
         * @param boolean $from_left 是否从左边出列
         * @return boolean 成功返回缓存变量值,失败返回false
         */
        public function pop($key , $from_left=true) {
            $key = strval($key);
            if ($key === '') {
                return false;
            }

            $func = 'lPop';
            !$from_left and $func = 'rPop';
            
            try {
                $result = $this -> _redis -> $func($key);
            }catch(RedisException $e){
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }

            return $result;
        }
        
        /**
         * 缓存变量自增
         *
         * @access public
         * @param string $key 缓存变量名
         * @return boolean
         */
        public function increase($key) {
            $key = strval($key);
            if ($key === '') {
                return false;
            }

            try {
                $result = $this -> _redis -> incr($key);
            }catch(RedisException $e){
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }

            return $result ? true : false;
        }

        /**
         * 缓存变量自减
         *
         * @access public
         * @param string $key 缓存变量名
         * @return boolean 成功返回TRUE,失败返回FALSE
         */
        public function decrease($key) {
            $key = strval($key);
            if ($key === '') {
                return false;
            }

            try {
                $result = $this -> _redis -> decr($key);
            }catch(RedisException $e){
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }

            return $result ? true : false;
        }
        
        /**
         * 判断缓存变量是否已经存在
         *
         * @access public
         * @param string $key 缓存变量名
         * @return boolean 存在返回TRUE,否则返回FALSE
         */
        public function exists($key) {
            $key = strval($key);
            if ($key === '') {
                return false;
            }

            try {
                $result = $this -> _redis -> exists($key);
            }catch (RedisException $e) {
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }

            return $result ? true : false;
        }
        
        /**
         * 返回redis源对象
         *
         * @access public
         * @return object
         */
        public function get_handler() {
            return $this -> _redis;
        }

        // ---------私有实现---------------------------------------------
        /**
         * 检验并连接redis服务器
         *
         * @access private
         * @return boolean
         */
        private function _connect() {
            if (!class_exists('Redis', false)) {
                to_log(MAIN_LOG_ERROR, '', 'Redis类不存在,可能是没有安装php_redis扩展');
                return false;
            }

            try {
                $this -> _redis = new Redis();
                $this -> _redis -> connect($this -> _host, $this -> _port);
            }catch(RedisException $e){
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }

            return true;
        }

        /**
         * 判断是否已连接到服务器
         *
         * @access public
         * @return boolean
         */ 
        public function _is_connected() {
            if(!is_object($this -> _redis)) return false;

            try {
                $this -> _redis -> ping();
            }catch (RedisException $e) {
                to_log(MAIN_LOG_WARN, '', __CLASS__ . " -> " . __FUNCTION__ . ": " . $e -> getMessage());
                return false;
            }

            return true;
        }
    }
  • 相关阅读:
    用几何画板画三星状图形的方法有哪些
    ChemDraw 15.1 Pro插入阿尔法可以这样做
    用MathType编辑异或与非符号有什么方法
    整合Thinkphp数据库基本操作CURD,界面datagrid采用EasyUi的Demo
    可编辑表格
    jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、
    jfinal 使用类里的方法
    左右值无限分类实现算法
    PHP递归实现无限级分类
    ThinkPHP自动填充实现无限级分类的方法
  • 原文地址:https://www.cnblogs.com/phonecom/p/6816490.html
Copyright © 2011-2022 走看看