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使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa