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 相关文章推荐
用ODBC的分页显示
Oct 09 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
php 文件上传代码(限制jpg文件)
Jan 05 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
php数组添加与删除单元的常用函数实例分析
Feb 16 PHP
PHP实现操作redis的封装类完整实例
Nov 14 PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 PHP
总结对比php中的多种序列化
Aug 28 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
PHP访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
Underscore源码分析
2015/12/30 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
js实现带农历和八字等信息的日历特效
2016/05/16 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
jQuery 判断元素整理汇总
2017/02/28 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
快速了解python leveldb
2018/01/18 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
Python 虚拟空间的使用代码详解
2019/06/10 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
2014年医院工作总结
2014/11/20 职场文书
个人廉洁自律总结
2015/03/06 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
大国崛起日本观后感
2015/06/02 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技