redis操作封装类

时间:2022-03-11 09:56:52
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&period;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命令封装 >>>>>>>>>>>>>>>&gt ...

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

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

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

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

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

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

随机推荐

  1. Python札记 -- 装饰器补充

    本随笔是对Python札记 -- 装饰器的一些补充. 使用装饰器的时候,被装饰函数的一些属性会丢失,比如如下代码: #!/usr/bin/env python def deco(func): def ...

  2. elasticsearch 文档

    elasticsearch 文档 文档格式 索引中最基本的单元叫做文档 document. 在es中文档的示例如下: { "_index": "questions&quo ...

  3. java控制反转与依赖注入

    1.简介 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性,下面通过一个例子来引入这一概念. 2.案例 1)一般情况下的类耦合 Main.java public clas ...

  4. jQuery放大镜插件jqzoom使用

    源码下载,使用指导地址:http://www.mind-projects.it/projects/jqzoom/ 使用教程: 1.导入库文件 <script src="../js/jq ...

  5. Android 快速开发系列 打造万能的ListView GridView 适配器

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...

  6. LeetCode&lowbar;Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  7. mysql 的 decimal类型

    最近做项目时将decimal定义成了decimal(5,2),然后等到最大的结果都是999.99,找了很多地方找不出bug在哪里插入很更新的数据都是正确的而结果却都是999.99,最后才知道decim ...

  8. shardingsphere多数据源(springboot &plus; mybatis&plus;shardingsphere&plus;druid)

    org.springframeword.boot:spring-boot-starer-web: 2.0.4release io.shardingsphere:sharding-jdbc-spring ...

  9. If you did this already&comma; delete the swap file &quot&semi;&period;git&sol;&period;MERGE&lowbar;MSG&period;swp&quot&semi;

    出现这种情况一般是不正常退出造成的,找到隐藏文件后删除解决

  10. SpringSecurity实现用户名密码登录(Token)

    传统的应用是将Session放在应用服务器上,而将生成的JSESSIONID放在用户浏览器的Cookie中,而这种模式在前后端分离中就会出现以下问题 1,开发繁琐. 2,安全性和客户体验差 3,有些前 ...