zoukankan      html  css  js  c++  java
  • Yii2使用Redis

    一、安装Redis和简单配置

    1. 下载Redis安装包

    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 版)

    cd /www/html/basic
    php composer.phar require --prefer-dist yiisoft/yii2-redis
    

    2. 配置basic/config/web.php

    在components数组中添加如下内容:

    'redis' => [
        'class' => 'yii
    edisConnection',
        '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组件即可

  • 相关阅读:
    wget整站抓取、网站抓取功能;下载整个网站;下载网站到本地
    D3
    java/javac命令行如何同时引用多个包;错误 TypeError: 'JavaPackage' object is not callable 的含义
    在python里调用java的py4j的使用方法
    如何实现一个网站多个域名:目的是为了一个共同的前端+多个多语言实现的后端
    jvm内存回收机制
    xcode卸载后导致git/make异常
    TOC工具Table of content
    java.lang.IllegalAccessException;java.lang.Class.newInstance
    mac下xampp的使用
  • 原文地址:https://www.cnblogs.com/chengbocd/p/6151276.html
Copyright © 2011-2022 走看看