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. Servlet(11)—客户端跳转和服务端跳转

    客户端跳转: 1.链接跳转:< a href="">< /a > 2.表单提交< form>< /form> 3.Response. ...

  2. Aizu2170 Marked Ancestor(并查集)

    https://vjudge.net/problem/Aizu-2170 并查集用于管理元素分组情况. 建树pre[]记录父节点,一开始只有结点1被标记了,所以find()最终得到的根都是1. 如果遇 ...

  3. pygame-KidsCanCode系列jumpy-part6-主角挂掉重新开始

    游戏的虚拟世界中,最让人happy的一个因素就是主角挂了,而且重来,只要restart就行了,不象现实中人的生命只有1次.回顾上节的效果,如果方块向下落时,挡板没接住,整个游戏就跪了: 如果我们希望方 ...

  4. [原创]AndroBugs_Framework Android漏洞扫描器介绍

    [原创]AndroBugs_Framework Android漏洞扫描器介绍 1 AndroBugs_Framework Android 漏洞扫描器简介 一款高效的Android漏洞扫描器,可以帮助开 ...

  5. 什么是crf

    什么是crf 利用crf++进行实体识别的流程 确定标签体系: 确定特征模板文件: 处理训练数据文件: 模型训练. 确定标签体系 大部分情况下,标签体系越复杂准确度也越高,但相应的训练时间也会增加.因 ...

  6. Jquery如何获取某个元素前(后)的文本内容?

    <span> text here... <a id="target_element">百万创想</a></span> 如何获得a标签 ...

  7. 【问题与解决】Mac OS通过 npm 安装 React Native 报错(checkPermissions Missing write access to /usr/local/lib/node_modules)

    报错情况: 当Mac OS通过 npm 安装 React Native 报错,警告文字为:checkPermissions Missing write access to /usr/local/lib ...

  8. C# System.IO.StreamWriter

    实现一个 TextWriter,使其以一种特定的编码向流中写入字符. using System; using System.Collections.Generic; using System.Linq ...

  9. 基于Clang的缓存型C++编译器Zapcc

    http://www.infoq.com/cn/news/2018/06/zapcc-caching-cpp-compiler-open https://blog.csdn.net/joy0921/a ...

  10. web安全测试---AppScan扫描工具

    安全测试应该是测试中非常重要的一部分,但他常常最容易被忽视掉. 尽管国内经常出现各种安全事件,但没有真正的引起人们的注意.不管是开发还是测试都不太关注产品的安全.当然,这也不能怪我们苦B的“民工兄 弟 ...