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日历程序
Dec 06 PHP
一些使用频率比较高的php函数
Oct 03 PHP
PHP $_FILES函数详解
Mar 09 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
PHP使用PDO连接ACCESS数据库
Mar 05 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
Mar 08 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 PHP
PHP实现的二分查找算法实例分析
Dec 19 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
c#中的实现php中的preg_replace
2009/12/21 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
PHP实现文件上传与下载
2020/08/28 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
JavaScript无缝滚动效果的实例代码
2017/03/27 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
python 捕获shell脚本的输出结果实例
2017/01/04 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
Python中optparser库用法实例详解
2018/01/26 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
Python魔术方法专题
2020/06/19 Python
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
AJAX的全称是什么
2012/11/06 面试题
统计系教授推荐信
2014/02/28 职场文书
新学期决心书
2014/03/11 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
五年级作文之劳动作文
2019/11/12 职场文书