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;
    }
}

redis操作封装类的更多相关文章

  1. Atitit.redis操作总结

    Atitit.redis操作总结 1.1. 获取redis所有kv1 1.2. dbsize:返回当前数据库中key的数目 1 1.3. 一起吧所有key列出来1 1.4. Java连接redis   ...

  2. 基于 php-redis 的redis操作

    基于 php-redis 的redis操作 林涛 发表于:2016-5-13 12:12 分类:PHP 标签:php,php-redis,redis 203次 redis的操作很多的,下面的例子都是基 ...

  3. redis操作

    测试环境redis操作 cd /export/servers/redis-2.8.9/src/./redis-cli -n 0 keys keys(pattern):返回满足给定pattern的所有k ...

  4. php的redis 操作类,适用于单台或多台、多组redis服务器操作

    redis 操作类,包括单台或多台.多组redis服务器操作,适用于业务复杂.高性能要求的 php web 应用. redis.php: <?php /* redis 操作类,适用于单台或多台. ...

  5. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  6. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  7. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

  8. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

  9. 设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类

    1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式. 在它的核心结构中仅仅包括一个被称为单例类的特殊类. 通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问.从而方便对实例个 ...

随机推荐

  1. jQuery 学习05——AJAX:定义、load()方法、get()/post()方法

    AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML). load() 方法:从服务器加载数据,并把返回的数据放入被选元素中. 语法:$ ...

  2. mount: wrong fs type, bad option, bad superblock

    mount: wrong fs type, bad option, bad superblock on 125.64.41.244:/data/img,       missing codepage ...

  3. JSP展示两位小数

    <td class="thCenter"> <fmt:formatNumber type="number" value="${rec ...

  4. Spring 拦截器postHandle无法修改Response的原因

    如果controller跳转至页面,postHandle是没问题的. 如果@ResponseBody注释 或者返回 ResponseEntity,在postHandle拦截器中修改请求头,是无效的. ...

  5. 【C#】解析C#中管道流的使用

    目录结构: contents structure [+] 匿名管道(anonymous pipe) 命名管道(named pipe) 管道为进程间通信提供了一种可能.管道分为两种,一种是匿名管道,另一 ...

  6. Oracle数据库远程连接配置教程

    本人前一段时间做过Oracle数据库的相关工作.可是发现数据库的监听程序和服务名比較难搞定,并且网上也没有现成的教程.所以经过自己的探索之后将这片文章贡献给大家,如有不当之处还请谅解并请联系本人. 此 ...

  7. 射频与微波测量之S参数

    转自:https://www.cnblogs.com/lyh523329053/p/9128577.html S参数 S散射也叫散射参数.是微波传输中的一组重要参数.由于我们很难在高频率时测量电流或电 ...

  8. SNF软件开发机器人-子系统-表单-表单设计

    表单设计 在我们做程序时总要对表单的内容进行设计,然而对控件位置等信息的调整总是麻烦的,还常常容易出错.SNF软件机器人完美的解决了这个问题. 1.效果展示: 2.使用说明: (1)打开页面,选中开发 ...

  9. Cmake find_package 需要指定具体的so

    需要使用cmake的find_package将boost库添加到项目中,通过cmake --help-module FindBoost 可以查看cmake引入Boost的帮助信息: 可以看到,Boot ...

  10. Shell脚本编程(三):shell参数传递

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以下实例我们向脚本传递三 ...