Yii2使用Redis - 从安装redis到使用 [ 2.0 版本 ]
一、安装Redis和简单配置
1. 下载Redis安装包
- 地址:http://redis.io/download , 本文选择Stable(3.0)版本
wget http://download.redis.io/releases/redis-3.0.5.tar.gz
2. 安装Redis
tar xzf redis-3.0.5.tar.gz
cd redis-3.0.5
make
3. 启动Redis
./src/redis-server &
附加内容 :
- Redis默认不是后台启动,不加 “&” 时会一直停留在命令界面
- 最好搭配配置文件一起启动例如:
./src/redis-server ./redis.conf
- redis.conf中设置 “daemonize no” 为 “daemonize yes” 也代表redis以后台的方式启动,前提时redis-server启动时带上redis.conf
二、安装phpredis扩展
1. 下载phpredis扩展安装包
wget http://pecl.php.net/get/redis-2.2.7.tgz , 本文选择2.2.7版本
2. 安装phpredis
tar zxvf redis-2.2.7.tgz
cd redis-2.2.7
/opt/server/php-5.5.7/bin/phpize
./configure
make
make install
- 以上步骤完成后需要在php.ini中添加如下代码:
extension=/opt/server/php-5.5.7/lib/php/extensions/no-debug-non-zts-20121212/redis.so
3.重启web组件(本文使用Nginx + php5-fpm)
/opt/server/nginx/sbin/nginx -s reload
kill -USR2 `cat /opt/server/php-5.5.7/var/run/php-fpm.pid`
三、配置Yii2的redis扩展(本文使用Yii2 basic 版)
- 官方提供的文档地址:https://github.com/yiisoft/yii2-redis/blob/master/docs/guide/README.md
1. 安装Yii2的redis扩展
cd /www/html/basic
php composer.phar require --prefer-dist yiisoft/yii2-redis
2. 配置basic/config/web.php
在components数组中添加如下内容:
'redis' => [
'class' => 'yii\redis\Connection',
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
],
3. 使用
$redis = Yii::$app->redis;
$redis->get('key');
$redis->set('k','v');
附加(一些报错解决)
basic/vendor/yiisoft/yii2-redis/Connection.php文件的源码中265行开始(因实际而定)
变量 errorNumber 、errorDescription ,没提前定义Yii2 一直报undefined
"@"把报错屏蔽了,一直查不到原因,删掉"@"才发现stream_socket_client、stream_socket_server()这两个函数禁用了
更改前
$this->_socket = @stream_socket_client(
$this->unixSocket ? 'unix://' . $this->unixSocket : 'tcp://' . $this->hostname . ':' . $this->port,
$errorNumber,
$errorDescription,
$this->connectionTimeout ? $this->connectionTimeout : ini_get("default_socket_timeout")
);
更改后
//也可以不定义这两个变量,通常项目都会忽略notice报错,视实际情况而定
$errorNumber = '';
$errorDescription = '';
//----如果报错:Warning:stream_socket_server() has been disabled for security reasons... 请看下面解决方法
//----这里"@" ↓↓↓ 把报错屏蔽了,需要删除"@"才能看见上面的报错,
$this->_socket = stream_socket_client(
$this->unixSocket ? 'unix://' . $this->unixSocket : 'tcp://' . $this->hostname . ':' . $this->port,
$errorNumber, //----这两个变量没有提前定义一直报undefined
$errorDescription, //----这两个变量没有提前定义一值报undefined
$this->connectionTimeout ? $this->connectionTimeout : ini_get("default_socket_timeout")
);
解决方法:编辑php.ini把disable_functions=...中找到stream_socket_server()、stream_socket_client删除并保存,重启web组件即可
Nature 广州
注册时间:2015-09-21
最后登录:2022-07-11
在线时长:20小时36分
最后登录:2022-07-11
在线时长:20小时36分
- 粉丝8
- 金钱2580
- 威望10
- 积分2880
共 7 条评论
新人发帖,格式不好请见谅。请大家多多指教
我帮你修改好格式了
@strive 感谢帮助!
基础介绍,不错!
其实这里不需要安装phpredis扩展,因为yii里的redis 用的是 socket连接的。没有用phpredis扩展库。
是的,yii\redis\Connection其实就如同pear上面的redis的类工具包
当时还是个新手,受教了!
@zhliu 那现在是怎么样写的呢
教程一般
按照教程走的,但是我这边 Method yii\redis\Connection::set() does not exist
你看看vendor/yiisoft/yii2-redis文件夹存不存在。没存在的话就说明你的redis组件没装上。
@zhliu 好了,我把 localhost 改成 127.0.0.1 就好了
我手动添加redis,中间解压yii2-redis-master.zip之后 将文件名称也改了,但是之后执行的时候还是出现了Class yii\redis\Connection does not exist。的问题,找了半天没找到答案,之后发现解压后的文件有src的文件夹装着connection的文件,我将所有的php文件全部直接放到了src的平级文件夹,之后就没有引用的问题了。。希望遇到这个坑的同学,可以借鉴一下
感谢提示!
@误入歧途的先森 感谢提示!
修改成 yiisoft/yii2-redis/src就好了
找了半天,看到这个src 有点那个意思的了,不敢确定,又来看一下评论,找到答案了。感谢
手动负责的Vendor的需要advanced/vendor/yiisoft/extensions.php修改这个文件就好了,下载的包文件不用修改
@暴打小朋友 我之前也暴打小朋友。。。还组了个战队
666666