codeigniter的Redis使用

2024-04-02 12:38
文章标签 使用 redis codeigniter

本文主要是介绍codeigniter的Redis使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Redis的配置和简单使用1:

1.system/config/redis.php:

<?php
$config['redis_host']     = '127.0.0.1';
$config['redis_port']     = '6379';
$config['redis_isopen']   = true;
  1. ./application/config/config.php:
require_once(BASEPATH . "config/redis.php");

3 . ./application/libraries/RedisService.php:

<?php
class RedisService{public $CI;public $redis;public function __construct(){$this->CI = & get_instance();$this->CI->load->driver('cache', array('adapter' => 'redis'));$this->redis = $this->CI->cache->get_redis();$this->cache = $this->CI->cache;}
}

4…/system/libraries/Cache/Cache.php:

protected $valid_drivers    = array(
protected $valid_drivers = array('apc','dummy','file','memcached','redis','wincache');
修改:
/*** Reference to the driver** @var mixed*///protected $_adapter = 'dummy';protected $_adapter = 'redis'; // change by wuyongyu/*** Fallback driver** @var string*///protected $_backup_driver = 'dummy';protected $_backup_driver = 'redis'; // change by wuyongyu

//添加:

public function get_redis(){if($this->_adapter == 'redis'){return $this->{$this->_adapter}->get_redis();}return false;
}

5 . ./system/libraries/Cache/drivers/Cache_redis.php


<?php
/*** CodeIgniter** An open source application development framework for PHP** This content is released under the MIT License (MIT)** Copyright (c) 2014 - 2015, British Columbia Institute of Technology** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documentation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in* all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN* THE SOFTWARE.** @package	CodeIgniter* @author	EllisLab Dev Team* @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (http://ellislab.com/)* @copyright	Copyright (c) 2014 - 2015, British Columbia Institute of Technology (http://bcit.ca/)* @license	http://opensource.org/licenses/MIT	MIT License* @link	http://codeigniter.com* @since	Version 3.0.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' => 'adasadsa', // NULL change by wuyongyu'port' => 6379,'timeout' => 0);/*** Redis connection** @var	Redis*/protected $_redis;/*** An internal cache for storing keys of serialized values.** @var	array*/protected $_serialized = array();// ------------------------------------------------------------------------/*** Get cache** @param	string	Cache ID* @return	mixed*/public function get($key){$value = $this->_redis->get($key);if ($value !== FALSE && isset($this->_serialized[$key])){return unserialize($value);}return $value;}// ------------------------------------------------------------------------/*** 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){if (is_array($data) OR is_object($data)){if ( ! $this->_redis->sIsMember('_ci_redis_serialized', $id) && ! $this->_redis->sAdd('_ci_redis_serialized', $id)){return FALSE;}isset($this->_serialized[$id]) OR $this->_serialized[$id] = TRUE;$data = serialize($data);}elseif (isset($this->_serialized[$id])){$this->_serialized[$id] = NULL;$this->_redis->sRemove('_ci_redis_serialized', $id);}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){if ($this->_redis->delete($key) !== 1){return FALSE;}if (isset($this->_serialized[$key])){$this->_serialized[$key] = NULL;$this->_redis->sRemove('_ci_redis_serialized', $key);}return TRUE;}// ------------------------------------------------------------------------/*** 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->incr($id, $offset);}// ------------------------------------------------------------------------/*** 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->decr($id, $offset);}// ------------------------------------------------------------------------/*** 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')){log_message('debug', 'The Redis extension must be loaded to use Redis cache.');return FALSE;}return $this->_setup_redis();}// ------------------------------------------------------------------------/*** 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);$this->_redis = new Redis();//log_message('error',$config);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']);}// Initialize the index of serialized values.$serialized = $this->_redis->sMembers('_ci_redis_serialized');if ( ! empty($serialized)){$this->_serialized = array_flip($serialized);}return TRUE;}// ------------------------------------------------------------------------/*** Class destructor** Closes the connection to Redis if present.** @return	void*/public function __destruct(){if ($this->_redis){$this->_redis->close();}}public function get_redis(){return $this->_redis;}}

6 . 控制器中就可以使用啦:

//初始化:
$this->load->library('RedisService');
$this->redis = new RedisService;//使用:
$this->redis->redis->set('name', 'chenjian');
$this->redis->redis->get('name');

二. Redis 实际使用
使用redis 对数据库请求进行缓存.
~示例~:

1 . 控制器中:****

$this->load->model("user"); //初始化
$this->load->library( 'cache_mgr' ); //引用cache_mgr库文件
/*
get_cache有四个参数:get_cache(key, model里面的方法, 参数数组, 缓存的时长),且get_cache方法不仅仅可以取缓存,如果没有缓存就执行model里面的方法,并且缓存。
*/$this->cache_mgr = new CacheMgr();$data = $this->cache_mgr->get_cache($key, array($this->user, 'get_user'), array('age' => $age), 60 * 60);
}

application/libraries/CacheMgr里面的库文件:

<?php
class CacheMgr{protected static $redis;protected $host;protected $port;protected $pwd;protected $is_open;private $_config = array();public function __construct(){$this->_config = get_config();$this->host    = $this->_config['redis_host'];$this->port    = $this->_config['redis_port'];$this->is_open = $this->_config['redis_isopen'];$this->pwd     = $this->_config['redis_pwd'];if (! $this->is_open) {self::$redis = null;} elseif (! self::$redis)$this->connect ();}/**** @return cache_mgr*/static function get_instance(){$ci = get_instance ();$var = __CLASS__;return $ci->$var;}/*** 返回当前rediscache服务器是否有效** @return boolean*/public function is_connected(){return self::$redis ? true : false;}/*** 连接rediscache*/private function connect(){self::$redis = new Redis();if (! @self::$redis->connect ( $this->host, $this->port )) {self::$redis = null;// echo "not redis";} else {self::$redis->auth($this->pwd);}}/*** 前端代码读写缓存。所有前端代码只能用这个方法来写缓存** @param string $key 键值,可为数组array(group值,键值),group值可以用做批量删除* @param callback $function* @param array $params* @param int $expire* @return mixed*/public function get_cache($key, $function, $params = array(), $expire = 0){// 如果缓存没有开if (! self::$redis) {return call_user_func_array ( $function, $params );}$rs = $this->get ( $key );if (! $rs) {$rs = call_user_func_array ( $function, $params );if (! $rs) $expire = 5 * 60;$this->save( $key, $rs, $expire );}return $rs;}/*** 要清除的缓存** @param string $key*/public function clear($key){return self::$redis ? self::$redis->delete ( $key ) : false;}/*** Get cache** @param   string  $key    Cache ID* @return  mixed*/public function get($key){$data = self::$redis->hMGet($key, array('__ci_value'));if ( ! isset($data['__ci_value']) OR $data['__ci_value'] === FALSE){return FALSE;}return unserialize($data['__ci_value']);}/*** 生成缓存,通常用于后台** @param string $key* @param string $value* @param int $ttl 过期秒数,为0时永不过期* @return bool*/public function save($key, $value, $ttl = 60, $raw = FALSE){if ( ! self::$redis->hMSet($key, array('__ci_value' => serialize ($value)))){return FALSE;}elseif ($ttl){self::$redis->expireAt($key, time() + $ttl);}return TRUE;}/*** 加法,只能对数值型缓存使用,对 key 的值做++操作,并返回** @param string $key* @param int $value*/public function increment($key, $offset = 1){return self::$redis ? self::$redis->hIncrBy($key, 'data', $offset) : false;}/*** 减法,只能对数值型缓存使用,对 key 的值做--操作,并返回** @param string $key* @param int $value*/function decrement($key, $offset = 1){return self::$redis ? self::$redis->hIncrBy($key, 'data', -$offset) : false;}/*** 关闭rides** @param string $key* @param int $value*/public function close(){if (self::$redis) {return self::$redis->close ();self::$redis = null;}}}

这篇关于codeigniter的Redis使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/870004

相关文章

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左