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;
        }
    }
  • 相关阅读:
    LeetCode153 Find Minimum in Rotated Sorted Array. LeetCode162 Find Peak Element
    LeetCode208 Implement Trie (Prefix Tree). LeetCode211 Add and Search Word
    LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number
    LeetCode191 Number of 1 Bits. LeetCode231 Power of Two. LeetCode342 Power of Four
    LeetCode225 Implement Stack using Queues
    LeetCode150 Evaluate Reverse Polish Notation
    LeetCode125 Valid Palindrome
    LeetCode128 Longest Consecutive Sequence
    LeetCode124 Binary Tree Maximum Path Sum
    LeetCode123 Best Time to Buy and Sell Stock III
  • 原文地址:https://www.cnblogs.com/phonecom/p/6816490.html
Copyright © 2011-2022 走看看