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调用Oracle存储过程
Oct 09 PHP
php下实现在指定目录搜索指定类型文件的函数
Oct 03 PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
Aug 10 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
Jun 26 PHP
浅谈php命令行用法
Feb 04 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
简单谈谈 php 文件锁
Feb 19 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 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
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
php中的ini配置原理详解
2014/10/14 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
python操作列表的函数使用代码详解
2017/12/28 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
python爬取哈尔滨天气信息
2018/07/14 Python
python创建文件备份的脚本
2018/09/11 Python
python 解压pkl文件的方法
2018/10/25 Python
python绘制简单彩虹图
2018/11/19 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
python系列 文件操作的代码
2019/10/06 Python
python列表推导式入门学习解析
2019/12/02 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
Pycharm修改python路径过程图解
2020/05/22 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
小学教师的自我评价范例
2013/10/31 职场文书
农民致富事迹材料
2014/01/23 职场文书
Python极值整数的边界探讨分析
2021/09/15 Python