0

redis用作缓存数据的驱动程序。Laravel 的数据库配置具有定义Redis连接信息的能力。

  '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()));
}
4

1 回答 1

5

Laravel 可以处理多个连接。请参阅有关添加/使用多个数据库连接的问题/答案

一旦你为 redis 定义了多个连接,你需要做一些工作来访问你代码中的某个地方。这可能看起来像这样:

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

编辑

我将在此处添加一些内容,让您了解如何执行此操作,这样您就不需要到处使用连接逻辑了:

最简单的是,您可以在您的应用程序的某处(可能是 start.php 或其他 app/start/*.php 文件)绑定您的 redis 缓存实例:

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

如果您有自己的应用程序代码库,您也可以创建一个服务提供者。您可以在其中注册“rediscache”,然后在您的应用程序中以相同的方式使用它。

希望这会有所帮助——还有其他代码架构——使用依赖注入,也许还有一个存储库来帮助进一步组织你的代码。

于 2013-08-26T16:32:05.980 回答