首先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)); }