php+redis for CI框架在windows下的安装配置
我的环境: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
- 用记事本或者Notepad++打开redis.windows.conf并找到“# requirepass foobared”这一行,在这一行下面增加一行“requirepass 你的密码”
-
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文件,内容大致如下:
1 2 3 4 5 6 7 8 9 10 |
<?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、程序中的应用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
//加载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、使用自己替换的原生类库进行操作示例: <code> $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的所有值 |
噢!评论已关闭。