php+redis for CI框架在windows下的安装配置

    |     2018年4月6日   |   学习偶记   |     评论已关闭   |    725

我的环境:win7 64位 + phpstudy php5.6 + CI3.x

如果您想让CI支持redis缓存,需要在服务器上进行下列步骤。

需要下载的东西:redis windows安装包   PHP5.6 redis的dll扩展

redis windows安装包:我下载的是 64位 Redis-x64-3.2.100.msi ,如果32位的操作系统请下载32位。https://github.com/MicrosoftArchive/redis/releases

如果想设置连接密码什么的,可以参看:https://blog.csdn.net/hwjcmozw/article/details/77940852

  1. 用记事本或者Notepad++打开redis.windows.conf并找到“# requirepass foobared”这一行,在这一行下面增加一行“requirepass 你的密码”
  2. cmd命令转入Redis的安装目录,并输入redis-server redis.windows.conf

PHP5.6 redis的dll扩展:https://pecl.php.net/package/redis/2.2.7/windows  【其他版本:https://pecl.php.net/package/redis】

关键点:NTS X86[可以打开Phpinfo()来查看一下,因为很多套件的Php都是32位的]

 

服务器php.ini修改:将下载的文件解压,然后将 php_redis.dll 放到php的ext目录,并且修改php.ini 增加extension = php_redis.dll

重启 web服务器【是物理重启,不是重启web套件】,然后用phpinfo()函数看一下phpinfo中redis扩展是否启用。

CI如何使用redis?

1、在Application/config 目录下新建redis.php文件,内容大致如下:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

$config['socket_type'] = 'tcp'; //`tcp` or `unix`
$config['socket'] = '/var/run/redis.sock'; // in case of `unix` socket type
$config['host'] = '127.0.0.1';
$config['password'] = NULL;
$config['port'] = 6379;
$config['timeout'] = 0; //redis过期时间,秒,0为永不过期

2、程序中的应用:

//加载redis驱动
$this->load->driver('cache');
//然后直接使用方法
例如:$this->cache->redis->is_supported(); //是否支持redis
$this->cache->redis->save('key','value'); //保存redis键值
相应的方法链接:http://codeigniter.org.cn/user_guide/libraries/caching.html#redis

3、自行扩展CI的redis类
在实际的应用中,CI的缓存方法太少,不能发挥redis的效率。所以需要对CI的redis库进行重写。本来以为直接扩展extends CI_Cache_redis类可以,经过测试,发现不行。
于是重写了CI的redis类。
方法:
A、在Appliction/libraries 下新建类文件 CI_Cache_redis.php
B、复制\system\libraries\Cache\drivers\Cache_redis.php的内容到CI_Cache_redis.php
示例:新增redis方法到新建的类里:

    /**
     * Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。
     * 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。
     * 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
     * @param string $key
     * @param int $start
     * @param int $end
     * @return array
     */
    public function lrange($key = '',$start = 0,$end = -1)
    {
        return $this->_redis->lRange($key,$start,$end);
    }

 C、可以参考redis的命令,进行扩展。 这个方法可以参看CI的文档:http://codeigniter.org.cn/user_guide/general/creating_libraries.html 中有关 使用你自己的类库替换原生类库 部分 
 D、使用自己替换的原生类库进行操作示例: 
        $this->load->library('CI_Cache_redis');
        if($this->cache->redis->is_supported()) {
            $this->redis = new CI_Cache_redis();
        }
        $this->redis->clean();// 清除数据库
        $new = array(
            '第一' => 'one',
            '第二' => 'two'
        );
        $new1 = array(
            '第3' => 'one',
            '第4' => 'two'
        );
        $this->redis->rpush('a1',json_encode($new,JSON_UNESCAPED_UNICODE));
        $this->redis->rpush('a1',json_encode($new1,JSON_UNESCAPED_UNICODE));
        var_dump($this->redis->lrange('a1'));// 返回list中a1的所有值

噢!评论已关闭。