2016-04-22 189 views
1

我正在使用帶文件緩存和redis緩存的yii2。在我的主配置文件中,定義了redis緩存設置。Yii2 redis緩存在文件緩存中

'redis' => [ 
     'class' => 'yii\redis\Connection', 
     'hostname' => 'MY_IP', 
     'port' => MY_PORT, 
     'database' => 0, 
    ], 

我還在文件緩存設置下添加了一個組件。

'cache' => [ 
     'class' => 'yii\caching\FileCache', 
    ], 

所以緩存我使用的是$cache = Yii::$app->cache;以及用於設置緩存Yii::$app->cache->set($id, $value, $time);並開始使用Yii::$app->cache->get($id);所以這是從文件緩存設置的值或者是覆蓋filecache並使用Redis的過去。

如果是使用filecache所以我們如何重寫與Redis的的filecache。可我們使用Redis的緩存與此Yii::$app->cache->get($id);或者我們可以使用Redis的與use yii\redis\Cache;和設置使用

$redis->hmset('test_collection', 'key1', 'val1', 'key2', 'val2'); 

回答

1

是你可以通過簡單的$cache屬性設置爲這樣:

'cache' => [ 
    'class' => 'yii\redis\Cache', 
    'redis' => 'redis' // id of the connection component as it is already defined 
]; 

在我的代碼我使用這種方式:

$cache = Yii::$app->cache; 

$cache->add($access_token, ['id' => Yii::$app->user->id], $expire); 

$user = $cache->get($access_token); 

我也注意到一些組件已經在使用它,如urlManager,它開始將生成的規則存儲在redis數據庫中。請參閱yii\redis\Cache文檔以瞭解在$ cache內使用時的可用屬性和方法的完整列表。

+0

在你的緩存設置你的類被定義爲redis,但你正在使用$ cache = Yii :: $ app-> cache;而不是$ redis = Yii :: $ app-> redis;所以這是存儲在redis或文件緩存中。 –

+0

yes在redis中,我使'cache'組件使用'yii \ redis \ Cache'而不是'yii \ caching \ FileCache'。現在,兩個組件** cache **和** redis **應該使用相同的redis DB,您可以同時使用這兩個組件。唯一的區別是在'Yii :: $ app-> cache'中,你可以做簡單的東西,比如add和get(參見我鏈接的文檔)。爲了使用更高級的redis相關方法,例如'hmset()',您需要在'$ redis'組件中調用它們。 –

+0

好的。當我們使用文件緩存時,它將創建一個用於存儲緩存的運行時文件,根據你在定義redis的屬性類之後它不會在運行時創建一個文件,它將使用來自redis db的文件。 –