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中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Kotlin 枚举类使用举例

《Kotlin枚举类使用举例》枚举类(EnumClasses)是Kotlin中用于定义固定集合值的特殊类,它表示一组命名的常量,每个枚举常量都是该类的单例实例,接下来通过本文给大家介绍Kotl... 目录一、编程枚举类核心概念二、基础语法与特性1. 基本定义2. 带参数的枚举3. 实现接口4. 内置属性三、