php框架CodeIgniter使用redis的方法分析


Posted in PHP onApril 13, 2018

本文实例讲述了php框架CodeIgniter使用redis的方法。分享给大家供大家参考,具体如下:

1、安装redis

首先计算机上必须已经装了redis服务(redis数据库)并运行,详见另一篇文章:https://3water.com/article/138173.htm

2、安装phpredis

① 下载

项目地址:https://github.com/phpredis/phpredis(可以不管这个),这里面提到,windows版本的phpredis要自己编译,当然我们不能这么蛮干。

说下我走过的弯路,一开始从http://windows.php.net/downloads/pecl/snaps/redis/20160319/(这个也可以不管)下载了,一直都弄不好,其实这个vc14是7.0版本的php,我们需要的是7.1版本的,所以一直就是错,找不到问题所在,直到找到这个:

http://pecl.php.net/package-stats.php

对应的版本点进去:

http://pecl.php.net/package/redis/3.1.1/windows

下载7.1对应的版本。

② 安装

将下载解压的php_redis.dll放在php解释器的ext,会发现mysql等的模块也都放在这里,然后打开php.ini,找到;extension=php_bz2.dll,在其上面添加extension=php_redis.dll

也就是在extension的配置区域的头部,添加上这个redis的配置。安装就算完成了。

③ 查看配置信息

重启服务器或者重启计算机,index.php的路径下添加一个查看页面:phpinfo.php,在里面添加:

<?php
 echo phpinfo();
?>

然后访问http://yourdomain.com/phpinfo.php,可以看到配置信息,寻找有没有redis配置成功的信息,如果有则配置完成了。

3、php原生的方式操作redis

// 原生redis类库,不需要config/redis.php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
//$redis->set('key10','xx10',20);//第三个参数是存续时间,单位是秒,如果不填则为永久
echo $redis->get('key10');

4、配置redis.php

在myApplication/config下创建文件redis.php:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * Created by PhpStorm.
 * Date: 2017/2/9
 * Time: 13:32
 */
$config['socket_type'] = 'tcp';
$config['host'] = '127.0.0.1';
$config['password'] = NULL;
$config['port'] = 6379;
$config['timeout'] = 0;
?>

不管是使用框架的redis库还是下面的自定义redis库都需要这个配置文件。

除了配置redis.php之外,还必须在

application/config/config.php里面配置我们使用的缓存类型,默认是这样的:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

如果我们使用redis,那么要配置成类似这样:

$config['sess_driver'] = 'redis';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;
$config['sess_save_path'] = 'tcp://127.0.0.1:xxxx';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 600;
$config['sess_regenerate_destroy'] = TRUE;

5、使用CI框架的redis库

// 框架的redis库
$this->load->driver('cache');
$this->cache->redis->save('key11','xx11');//这里注意,第三个参数是时间,在自定义redis库会说明
echo $this->cache->redis->get('key11');

6、使用自定义的redis类库

① Rediscli_default.php

自定义redis类库可以从system/libraries/Cache/drivers/Cache_redis.php拷贝一份,改名为Rediscli_default.php,类名也改为Rediscli_default,除此之外无需改变,可以再自己添加更多方法。将其放在myApplication/libraries/Rediscli/drivers/下

② Rediscli.php

在myApplication/libraries/Rediscli/下创建一个Rediscli.php

<?php
defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );
/**
 * Created by PhpStorm.
 * Date: 2017/2/9
 * Time: 20:00
 */
class Rediscli extends CI_Driver_Library {
 public $valid_drivers;
 public $CI;
 function __construct() {
  $this->CI = & get_instance ();
  $this->valid_drivers = array (
   'default'
  );
 }
}

③ 调用

// 自定义类,需要配置
$this->load->driver('rediscli');
if ($this->rediscli->default->is_supported())
{
 echo $this->rediscli->default->get('key2');
}

④ 时间

这个自定义redis库和框架的库是一样的,在这里集中说明一下。

$this->cache->redis->save('key11','xx11',1000);

这是保存值,第3个参数是时间,这个时间不能省略。通过查看函数可以看到,这个参数默认值是60秒,而非永久,所以这个参数是不能省略的。

7、注意这种情况

// 文本存储
$this->load->driver('cache',array('adapter'=>'redis','backup'=>'file'));
$this->cache->save('key5','xx5',10000);
echo $this->cache->get('key5');//xx5

这个代码的意思是,首先使用redis来存储,如果没有找到的话,就使用文本存储。会发现在myApplication/cache存放了文本文件,每个key会有一个文本。

因为没有报错,所以一时可能不知道这个数据到底存在哪里。

这种还是少用吧,毕竟用redis是为了速度更快。

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP如何得到当前页和上一页的地址?
Nov 27 PHP
解析thinkphp的左右值无限分类
Jun 20 PHP
PHP Curl出现403错误的解决办法
May 29 PHP
ThinkPHP3.1.3版本新特性概述
Jun 19 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
PHP匿名函数和use子句用法实例
Mar 16 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 #PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 #PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 #PHP
PHP实现的简单组词算法示例
Apr 10 #PHP
PHP实现的大文件切割与合并功能示例
Apr 10 #PHP
PHP实现分布式memcache设置web集群session同步的方法
Apr 10 #PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 #PHP
You might like
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
php实现用户登陆简单实例
2017/04/04 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
Python 字符串中的字符倒转
2008/09/06 Python
python生成器推导式用法简单示例
2019/10/08 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
教师实习自我鉴定
2013/12/13 职场文书
酒店中秋节活动方案
2014/01/31 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
《雪地里的小画家》教学反思
2014/02/22 职场文书
愚人节活动策划方案
2014/03/11 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
银行业务授权委托书
2014/10/10 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
2019教师的学习计划
2019/06/25 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript