2013-08-26 32 views
0

我正在使用redis作爲緩存數據的驅動程序。 Laravel的數據庫配置能夠定義連接信息。如何在使用redis驅動程序時更改Laravel 4的連接信息?

'redis'  => array(
    'cluster' => true, 
    'default' => array(
     'host'  => '127.0.0.1', 
     'port'  => 6379, 
     'database' => 0, 
    ), 
), 

但是,如果我想有定義了多個連接,並使用特定的connection使用的緩存,我怎麼能做到這一點的Laravel 4.有上cache.php無連接的配置,我可以指定redis連接名稱。它目前有一個connection配置,如果緩存驅動程序爲database,將使用該配置。

編輯

我只是通過Laravel代碼去和初始化Redis的驅動程序時,它看起來像Laravel沒有尋找到的連接。我的理解是否正確?

http://laravel.com/api/source-class-Illuminate.Cache.CacheManager.html#63-73

protected function createRedisDriver() 
{ 
    $redis = $this->app['redis']; 

    return $this->repository(new RedisStore($redis, $this->getPrefix())); 
} 

回答

5

Laravel可以處理多個連接。見this question/answer on adding/using multiple database connections

一旦你爲redis定義了多個連接,你需要做一些工作來訪問代碼中的某些地方。這可能是這個樣子:

$redisCache = App::make('cache'); // Assumes "redis" set as your cache 
$redisCache->setConnection('some-connection'); // Your redis cache connection 
$redisCache->put($key, $value'); 

編輯

我會在這裏補充一點給你如何做到這一點,所以你並不需要到處連接邏輯的想法:

最簡單的,您可以將您的Redis的bind an instance緩存某處(也許start.php或其他應用程序/啓動/ * PHP文件。)在你的應用程序:

App::singleton('rediscache', function($app){ 
    $redisCache = $app['cache']; 
    $redisCache->setConnection('some-connection'); // Your redis cache connection 
    return $redisCache; 
}); 

然後,在你的代碼,你可以這樣做緩存:

$cache = App::make('rediscache'); 
$cache->put($key, $value); // Or whatever you need to do 

您還可以創建一個服務提供商,如果你有你的代碼own application library。您可以在那裏註冊'rediscache',然後在應用程序中以相同的方式使用它。

希望能夠幫助我們開始 - 還有其他代碼體系結構 - 使用依賴注入和可能的repository來幫助進一步組織您的代碼。

+0

因此,每次在緩存中添加或檢索值時,都必須執行此操作。在'/ app/config/cache.php'上提到一個連接信息就像我們對數據庫緩存的方式一樣容易。 –

+0

那麼有代碼模式,可以讓你精簡,但代碼。我不確定您對Laravel的IoC容器,依賴注入和其他代碼架構的想法的知識水平。我建議使用「存儲庫模式」查看 - 請參閱[這裏](http://stackoverflow.com/questions/17367159/laravel-repositories)和[這裏](http://culttt.com/2013/07/08 /創建靈活控制器功能於laravel -4-使用的資料庫/)。希望這可以讓你開始看到如何在代碼中編寫該邏輯,並在很多地方使用它。 – fideloper

+0

我更新了我的迴應,提供了一些關於如何讓代碼更易於重用的想法。 – fideloper

相關問題