reids之YII常見使用問題

首先YII的框架包中並不含redis部分,須要本身配置和安裝。php

第一部分:Mac下YII框架的redis安裝與配置redis

1.安裝redis數據庫

 

方法一:json

在沒有安裝YII的時候,能夠經過修改composer的json文件實現修改安裝的時候的配置。緩存

 

在cmd(終端)使用,這個是經過composer進行安裝。yii2

php composer.phar require --prefer-dist yiisoft/yii2-redisapp

或者在composer.json文件裏添加"yiisoft/yii2-redis": "~2.0.0」文件。在執行YII的安裝配置。composer

 

方法二:框架

手動安裝,先下載yii2.0-redis拓展的安裝,把下載的拓展文件放到vendor/yiisoft下。確認命名:yii2-redisyii

修改vender/yiisoft/下的extensions.php,加入redis擴展

'yiisoft/yii2-redis' =>

   array (

        'name' => 'yiisoft/yii2-redis',

        'version' => '2.2.0.0',

        'alias' =>

       array (

            '@yii/redis' => $vendorDir . '/yiisoft/yii2-redis',

        ),

    ),

 

2.確認環境是否配置。

在終端執行redis-server嘗試打開redis服務,若是看到相似:長方體圖案和配置信息

表示redis已經成功安裝並開啓。若是沒有這樣的頁面,須要安裝下redis。

對於redis每次打開的操做,認爲比較繁瑣的時候,能夠考慮直接將redis配置在PHP的插件中,這樣能夠直接在開啓服務環境的時候同時開啓redis.開啓方式參考:http://www.yiichina.com/topic/6557。目前沒有在php.ini中配置。

 

 

3.在YII中配置redis

 

通常和數據庫配置在一塊兒,在common的config中。main-local.php 中。

'redis' => [

        'class' => 'yii\redis\Connection',

        'hostname' => 'localhost',

        'port' => 6379,

        'database' => 0,

],

 

這裏要注意一點,redis存在多個數據庫,在database部分能夠設置不一樣的數據庫,對於沒有該數據庫的狀況會自動建立。可是這裏的數據庫名字不能夠是字符串,通常默認爲0。能夠根據本身的配置狀況改成1,2,3....

 

 

4,redis的基本使用

public function actionIndex()

{  

    Yii::$app->redis->set('test','111');  //設置redis緩存

    echo Yii::$app->redis->get('test');   //讀取redis緩存

    exit;

    return $this->render('index');

}

 

第二部分:Yii的redis函數

 

如下是幾個簡單的小實例

1)設置鍵值

$source = Yii::$app->redis->set('var1','111');

當成功時會返回布爾值

$source = Yii::$app->redis->get('var1');

刪除鍵

$source = Yii::$app->redis->del('var1');

獲取鍵的值

$var2 = Yii::$app->redis->keys("*");

 

對於基本的命令都已轉化爲函數,能夠直接經過redis調用到,這裏注意下,在命令中每一個參數都須要做爲一個函數參數穿入。

 

以排序函數爲例:

原命令:
sort DAILY:SCORE LIMIT 0 12 DESC

轉化爲YII的函數:
Yii::$app->redis->sort(‘DAILY:SCORE’, 'LIMIT', '0', '12','DESC');

原理:

yii\redis\Connection 支持的命令中找到如下注釋:

全部的這些命令都會經過下面這個方法執行:

/**
* Allows issuing all supported commands via magic methods. *
* ```php * $redis->hmset(['test_collection', 'key1', 'val1', 'key2', 'val2']) * ``` * 
* @param string $name name of the missing method to execute 
* @param array $params method call arguments 
* @return mixed 
*/ 
public function __call($name, $params) { 
    $redisCommand = strtoupper(Inflector::camel2words($name, false)); 
    if (in_array($redisCommand, $this->redisCommands)) { 
       return $this->executeCommand($name, $params); 
    } 
    else {
       return parent::__call($name, $params);
    } 
}


public function executeCommand($name, $params = []) { 
    $this->open(); 
    array_unshift($params, $name); $command = '*' . count($params) . "\r\n";
    foreach ($params as $arg) {
       $command .= '$' . mb_strlen($arg, '8bit') . "\r\n" . $arg . "\r\n";
    }
    \Yii::trace("Executing Redis Command: {$name}", __METHOD__);
    fwrite($this->_socket, $command);
    return $this->parseResponse(implode(' ', $params));
}
相關文章
相關標籤/搜索