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

相关文章

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

Spring Boot 中正确地在异步线程中使用 HttpServletRequest的方法

《SpringBoot中正确地在异步线程中使用HttpServletRequest的方法》文章讨论了在SpringBoot中如何在异步线程中正确使用HttpServletRequest的问题,... 目录前言一、问题的来源:为什么异步线程中无法访问 HttpServletRequest?1. 请求上下文与线

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分