CI框架中redis缓存相关操作文件示例代码


Posted in PHP onMay 17, 2016

本文实例讲述了CI框架中redis缓存相关操作文件。分享给大家供大家参考,具体如下:

redis缓存类文件位置:

'ci\system\libraries\Cache\drivers\Cache_redis.php'

<?php
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP 5.2.4 or newer
 *
 * NOTICE OF LICENSE
 *
 * Licensed under the Open Software License version 3.0
 *
 * This source file is subject to the Open Software License (OSL 3.0) that is
 * bundled with this package in the files license.txt / license.rst. It is
 * also available through the world wide web at this URL:
 * http://opensource.org/licenses/OSL-3.0
 * If you did not receive a copy of the license and are unable to obtain it
 * through the world wide web, please send an email to
 * licensing@ellislab.com so we can send you a copy immediately.
 *
 * @package   CodeIgniter
 * @author   EllisLab Dev Team
 * @copyright  Copyright (c) 2008 - 2014, EllisLab, Inc. (http://ellislab.com/)
 * @license   http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
 * @link    http://codeigniter.com
 * @since    Version 3.0
 * @filesource
 */
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * CodeIgniter Redis Caching Class
 *
 * @package  CodeIgniter
 * @subpackage Libraries
 * @category  Core
 * @author   Anton Lindqvist <anton@qvister.se>
 * @link
 */
class CI_Cache_redis extends CI_Driver
{
  /**
   * Default config
   *
   * @static
   * @var array
   */
  protected static $_default_config = array(
    /*
    'socket_type' => 'tcp',
    'host' => '127.0.0.1',
    'password' => NULL,
    'port' => 6379,
    'timeout' => 0
    */
  );
  /**
   * Redis connection
   *
   * @var Redis
   */
  protected $_redis;
  /**
   * Get cache
   *
   * @param  string like *$key*
   * @return array(hash)
   */
  public function keys($key)
  {
    return $this->_redis->keys($key);
  }
  /**
   * Get cache
   *
   * @param  string Cache ID
   * @return mixed
   */
  public function get($key)
  {
    return $this->_redis->get($key);
  }
  /**
   * mGet cache
   *
   * @param  array  Cache ID Array
   * @return mixed
   */
  public function mget($keys)
  {
    return $this->_redis->mget($keys);
  }
  /**
   * Save cache
   *
   * @param  string $id Cache ID
   * @param  mixed  $data  Data to save
   * @param  int $ttl  Time to live in seconds
   * @param  bool  $raw  Whether to store the raw value (unused)
   * @return bool  TRUE on success, FALSE on failure
   */
  public function save($id, $data, $ttl = 60, $raw = FALSE)
  {
    return ($ttl)
      ? $this->_redis->setex($id, $ttl, $data)
      : $this->_redis->set($id, $data);
  }
  /**
   * Delete from cache
   *
   * @param  string Cache key
   * @return bool
   */
  public function delete($key)
  {
    return ($this->_redis->delete($key) === 1);
  }
  /**
   * hIncrBy a raw value
   *
   * @param  string $id Cache ID
   * @param  string $field Cache ID
   * @param  int $offset Step/value to add
   * @return mixed  New value on success or FALSE on failure
   */
  public function hincrby($key, $field, $value = 1)
  {
    return $this->_redis->hIncrBy($key, $field, $value);
  }
  /**
   * hIncrByFloat a raw value
   *
   * @param  string $id Cache ID
   * @param  string $field Cache ID
   * @param  int $offset Step/value to add
   * @return mixed  New value on success or FALSE on failure
   */
  public function hincrbyfloat($key, $field, $value = 1)
  {
    return $this->_redis->hIncrByFloat($key, $field, $value);
  }
  /**
   * lpush a raw value
   *
   * @param  string $key  Cache ID
   * @param  string $value value
   * @return mixed  New value on success or FALSE on failure
   */
  public function lpush($key, $value)
  {
    return $this->_redis->lPush($key, $value);
  }
   /**
   * rpush a raw value
   *
   * @param  string $key  Cache ID
   * @param  string $value value
   * @return mixed  New value on success or FALSE on failure
   */
  public function rpush($key, $value)
  {
    return $this->_redis->rPush($key, $value);
  }
  /**
   * rpop a raw value
   *
   * @param  string $key  Cache ID
   * @param  string $value value
   * @return mixed  New value on success or FALSE on failure
   */
  public function rpop($key)
  {
    return $this->_redis->rPop($key);
  }
   /**
   * brpop a raw value
   *
   * @param  string $key  Cache ID
   * @param  string $ontime 阻塞等待时间
   * @return mixed  New value on success or FALSE on failure
   */
  public function brpop($key,$ontime=0)
  {
    return $this->_redis->brPop($key,$ontime);
  }
  /**
   * lLen a raw value
   *
   * @param  string $key  Cache ID
   * @return mixed  Value on success or FALSE on failure
   */
  public function llen($key)
  {
    return $this->_redis->lLen($key);
  }
  /**
   * Increment a raw value
   *
   * @param  string $id Cache ID
   * @param  int $offset Step/value to add
   * @return mixed  New value on success or FALSE on failure
   */
  public function increment($id, $offset = 1)
  {
    return $this->_redis->exists($id)
      ? $this->_redis->incr($id, $offset)
      : FALSE;
  }
  /**
   * incrby a raw value
   *
   * @param  string $key Cache ID
   * @param  int $offset Step/value to add
   * @return mixed  New value on success or FALSE on failure
   */
  public function incrby($key, $value = 1)
  {
    return $this->_redis->incrby($key, $value);
  }
  /**
   * set a value expire time
   *
   * @param  string $key Cache ID
   * @param  int $seconds expire seconds
   * @return mixed  New value on success or FALSE on failure
   */
  public function expire($key, $seconds)
  {
    return $this->_redis->expire($key, $seconds);
  }
  /**
   * Increment a raw value
   *
   * @param  string $id Cache ID
   * @param  int $offset Step/value to add
   * @return mixed  New value on success or FALSE on failure
   */
  public function hset($alias,$key, $value)
  {
    return $this->_redis->hset($alias,$key, $value);
  }
  /**
   * Increment a raw value
   *
   * @param  string $id Cache ID
   * @param  int $offset Step/value to add
   * @return mixed  New value on success or FALSE on failure
   */
  public function hget($alias,$key)
  {
    return $this->_redis->hget($alias,$key);
  }
  /**
   * Increment a raw value
   *
   * @param  string $id Cache ID
   * @return mixed  New value on success or FALSE on failure
   */
  public function hkeys($alias)
  {
    return $this->_redis->hkeys($alias);
  }
  /**
   * Increment a raw value
   *
   * @param  string $id Cache ID
   * @param  int $offset Step/value to add
   * @return mixed  New value on success or FALSE on failure
   */
  public function hgetall($alias)
  {
    return $this->_redis->hgetall($alias);
  }
  /**
   * Increment a raw value
   *
   * @param  string $id Cache ID
   * @param  int $offset Step/value to add
   * @return mixed  New value on success or FALSE on failure
   */
  public function hmget($alias,$key)
  {
    return $this->_redis->hmget($alias,$key);
  }
  /**
   * del a key value
   *
   * @param  string $id Cache ID
   * @param  int $offset Step/value to add
   * @return mixed  New value on success or FALSE on failure
   */
  public function hdel($alias,$key)
  {
    return $this->_redis->hdel($alias,$key);
  }
  /**
   * del a key value
   *
   * @param  string $id Cache ID
   * @return mixed  New value on success or FALSE on failure
   */
  public function hvals($alias)
  {
    return $this->_redis->hvals($alias);
  }
  /**
   * Increment a raw value
   *
   * @param  string $id Cache ID
   * @param  int $offset Step/value to add
   * @return mixed  New value on success or FALSE on failure
   */
  public function hmset($alias,$array)
  {
    return $this->_redis->hmset($alias,$array);
  }
  /**
   * Decrement a raw value
   *
   * @param  string $id Cache ID
   * @param  int $offset Step/value to reduce by
   * @return mixed  New value on success or FALSE on failure
   */
  public function decrement($id, $offset = 1)
  {
    return $this->_redis->exists($id)
      ? $this->_redis->decr($id, $offset)
      : FALSE;
  }
  /**
   * Clean cache
   *
   * @return bool
   * @see   Redis::flushDB()
   */
  public function clean()
  {
    return $this->_redis->flushDB();
  }
  /**
   * Get cache driver info
   *
   * @param  string Not supported in Redis.
   *     Only included in order to offer a
   *     consistent cache API.
   * @return array
   * @see   Redis::info()
   */
  public function cache_info($type = NULL)
  {
    return $this->_redis->info();
  }
  /**
   * Get cache metadata
   *
   * @param  string Cache key
   * @return array
   */
  public function get_metadata($key)
  {
    $value = $this->get($key);
    if ($value)
    {
      return array(
        'expire' => time() + $this->_redis->ttl($key),
        'data' => $value
      );
    }
    return FALSE;
  }
  /**
   * Check if Redis driver is supported
   *
   * @return bool
   */
  public function is_supported()
  {
    if (extension_loaded('redis'))
    {
      return $this->_setup_redis();
    }
    else
    {
      log_message('debug', 'The Redis extension must be loaded to use Redis cache.');
      return FALSE;
    }
  }
  /**
   * Setup Redis config and connection
   *
   * Loads Redis config file if present. Will halt execution
   * if a Redis connection can't be established.
   *
   * @return bool
   * @see   Redis::connect()
   */
  protected function _setup_redis()
  {
    $config = array();
    $CI =& get_instance();
    if ($CI->config->load('redis', TRUE, TRUE))
    {
      $config += $CI->config->item('redis');
    }
    $config = array_merge(self::$_default_config, $config);
    $config = !empty($config['redis'])?$config['redis']:$config;
    $this->_redis = new Redis();
    try
    {
      if ($config['socket_type'] === 'unix')
      {
        $success = $this->_redis->connect($config['socket']);
      }
      else // tcp socket
      {
        $success = $this->_redis->connect($config['host'], $config['port'], $config['timeout']);
      }
      if ( ! $success)
      {
        log_message('debug', 'Cache: Redis connection refused. Check the config.');
        return FALSE;
      }
    }
    catch (RedisException $e)
    {
      log_message('debug', 'Cache: Redis connection refused ('.$e->getMessage().')');
      return FALSE;
    }
    if (isset($config['password']))
    {
      $this->_redis->auth($config['password']);
    }
    return TRUE;
  }
  /**
   * Class destructor
   *
   * Closes the connection to Redis if present.
   *
   * @return void
   */
  public function __destruct()
  {
    if ($this->_redis)
    {
      $this->_redis->close();
    }
  }
}
/* End of file Cache_redis.php */
/* Location: ./system/libraries/Cache/drivers/Cache_redis.php */

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 和 HTML
Oct 09 PHP
php字符串截取问题
Nov 28 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
php异步多线程swoole用法实例
Nov 14 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
php类自动加载器实现方法
Jul 28 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
PHP请求Socket接口测试实例
Aug 12 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
PHP创建自己的Composer包方法
Apr 09 PHP
详解使用php-cs-fixer格式化代码
Sep 16 PHP
Yii2如何批量添加数据
May 17 #PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 #PHP
php截取视频指定帧为图片
May 16 #PHP
PHP中常用的数组操作方法笔记整理
May 16 #PHP
PHP获取用户访问IP地址的5种方法
May 16 #PHP
php pdo oracle中文乱码的快速解决方法
May 16 #PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 #PHP
You might like
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
简单介绍Python中的len()函数的使用
2015/04/07 Python
Python素数检测的方法
2015/05/11 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
python 绘制国旗的示例
2020/09/27 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
与死神共舞观后感
2015/06/15 职场文书
庆七一主持词
2015/06/29 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis