Browse Source

allow redis connection to be configure directly in cache

fixes #1316
tags/2.0.0-beta
Carsten Brandt 11 years ago
parent
commit
b5c73a3724
  1. 39
      extensions/redis/Cache.php
  2. 20
      extensions/redis/README.md

39
extensions/redis/Cache.php

@ -30,13 +30,25 @@ use yii\base\InvalidConfigException;
* 'components' => [ * 'components' => [
* 'cache' => [ * 'cache' => [
* 'class' => 'yii\redis\Cache', * 'class' => 'yii\redis\Cache',
* 'redis' => [
* 'hostname' => 'localhost',
* 'port' => 6379,
* 'database' => 0,
* ]
* ],
* ],
* ]
* ~~~
*
* Or if you have configured the redis connection as an application component, the following is sufficient:
*
* ~~~
* [
* 'components' => [
* 'cache' => [
* 'class' => 'yii\redis\Cache',
* // 'redis' => 'redis' // id of the connection application component
* ], * ],
* 'redis' => [
* 'class' => 'yii\redis\Connection',
* 'hostname' => 'localhost',
* 'port' => 6379,
* 'database' => 0,
* ]
* ], * ],
* ] * ]
* ~~~ * ~~~
@ -49,7 +61,9 @@ use yii\base\InvalidConfigException;
class Cache extends \yii\caching\Cache class Cache extends \yii\caching\Cache
{ {
/** /**
* @var Connection|string the Redis [[Connection]] object or the application component ID of the Redis [[Connection]]. * @var Connection|string|array the Redis [[Connection]] object or the application component ID of the Redis [[Connection]].
* This can also be an array that is used to create a redis [[Connection]] instance in case you do not want do configure
* redis connection as an application component.
* After the Cache object is created, if you want to change this property, you should only assign it * After the Cache object is created, if you want to change this property, you should only assign it
* with a Redis [[Connection]] object. * with a Redis [[Connection]] object.
*/ */
@ -57,15 +71,20 @@ class Cache extends \yii\caching\Cache
/** /**
* Initializes the DbCache component. * Initializes the redis Cache component.
* This method will initialize the [[db]] property to make sure it refers to a valid DB connection. * This method will initialize the [[redis]] property to make sure it refers to a valid redis connection.
* @throws InvalidConfigException if [[db]] is invalid. * @throws InvalidConfigException if [[redis]] is invalid.
*/ */
public function init() public function init()
{ {
parent::init(); parent::init();
if (is_string($this->redis)) { if (is_string($this->redis)) {
$this->redis = Yii::$app->getComponent($this->redis); $this->redis = Yii::$app->getComponent($this->redis);
} else if (is_array($this->redis)) {
if (!isset($this->redis['class'])) {
$this->redis['class'] = Connection::className();
}
$this->redis = Yii::createObject($this->redis);
} }
if (!$this->redis instanceof Connection) { if (!$this->redis instanceof Connection) {
throw new InvalidConfigException("Cache::redis must be either a Redis connection instance or the application component ID of a Redis connection."); throw new InvalidConfigException("Cache::redis must be either a Redis connection instance or the application component ID of a Redis connection.");

20
extensions/redis/README.md

@ -35,6 +35,26 @@ return [
]; ];
``` ```
If you only use the redis cache, you can also configure the parameters of the connection within the
cache component:
```php
return [
//....
'components' => [
// ...
'cache' => [
'class' => 'yii\redis\Cache',
'redis' => [
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
],
],
]
];
```
Installation Installation
------------ ------------

Loading…
Cancel
Save