首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel:如何将缓存和会话分离到不同的redis数据库中?

Laravel:如何将缓存和会话分离到不同的redis数据库中?
EN

Stack Overflow用户
提问于 2015-01-08 15:50:45
回答 3查看 10K关注 0票数 22

我想把会话和缓存数据放到redis中。这是我在database.php中的配置:

代码语言:javascript
复制
'redis' => array(

    'cluster' => false,

    'default' => array(
        'host'     => '192.168.56.101',
        'port'     => 6379,
        'database' => 0,
    ),

    'session' => array(
        'host'     => '192.168.56.101',
        'port'     => 6379,
        'database' => 1,
    ),
),

session.php:

代码语言:javascript
复制
return array(
    'driver' => 'redis',
    'connection' => 'session',
);

cache.php:

代码语言:javascript
复制
'driver' => 'redis',

然而,在我编写如下代码的地方:

代码语言:javascript
复制
Cache::remember('aa',1,function(){
    return 'bb';
});

缓存驱动程序使用与会话驱动程序相同的redis数据库,这导致:

代码语言:javascript
复制
127.0.0.1:6379[1]> keys *
1) "aa"
2) "e0606244bec40b0352fb2b7b65d98049e49f6189"

有人知道如何强制缓存使用特定的redis连接吗?或者我必须把它们混在一起?

EN

回答 3

Stack Overflow用户

发布于 2016-07-30 18:59:46

引言

这是我的笔记,对于遇到这个问题的其他人,我认为这应该在文档中出现。

默认情况下,redis为您提供了16个独立的数据库,但laravel将尝试为会话和缓存使用数据库0。

我们的解决方案是让Redis缓存使用数据库0,数据库1用于会话,在那里通过运行php artisan cache:clear问题来解决会话。

注释:在Laravel 5.1上测试

1.建立会话Redis连接

修改config/database.php,将session密钥添加到redis选项:

代码语言:javascript
复制
'redis' => [

   'cluster' => false,

   'default' => [
       'host'     => env('REDIS_HOST', 'localhost'),
       'password' => env('REDIS_PASSWORD', null),
       'port'     => env('REDIS_PORT', 6379),
       'database' => 0,
   ],

   'session' => [
         'host'     => env('REDIS_HOST', 'localhost'),
         'password' => env('REDIS_PASSWORD', null),
         'port'     => env('REDIS_PORT', 6379),
         'database' => 1,
   ],
],

2.使用session连接

修改config/session.php,更改以下内容:

代码语言:javascript
复制
'connection' => null,

至:

代码语言:javascript
复制
'connection' => 'session',

3.使用Redis作为会话驱动

修改.env,更改SESSION_DRIVER

代码语言:javascript
复制
SESSION_DRIVER=redis

4.测试

执行以下artisan命令,然后检查您的登录状态:

代码语言:javascript
复制
php artisan cache:clear

如果登录状态仍然存在,就是这样!

票数 9
EN

Stack Overflow用户

发布于 2018-02-16 01:01:06

Laravel 5.5:

database.php应该如下所示:

代码语言:javascript
复制
'redis' => [

    'client' => 'predis',

    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => 0,
    ],

    'session' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => 1,
    ],

],

在session.php中,您还必须将密钥"connection“更新为正确的密钥。在本例中为“session”

代码语言:javascript
复制
'connection' => 'session',
票数 4
EN

Stack Overflow用户

发布于 2015-01-15 12:23:51

Laravel 5现在支持这一点。

https://github.com/laravel/framework/commit/d10a840514d122fa638eb5baa24c8eae4818da3e

您可以通过修改config/cache.php来选择redis连接

代码语言:javascript
复制
'stores' => [
    'redis' => [
        'driver' => 'redis',
        'connection' => 'your-connection-name',
    ],
],

Laravel 4 CacheManager不支持选择redis连接。

您需要做的就是修改/扩展CacheManager并覆盖createRedisDriver()方法。

修改此行

代码语言:javascript
复制
return $this->repository(new RedisStore($redis, $this->getPrefix()));

代码语言:javascript
复制
return $this->repository(
    new RedisStore($redis, $this->getPrefix(), 
    $this->app['config']['cache.redis'])
);

现在,您可以在cache.php中定义配置

代码语言:javascript
复制
'redis' => 'your-connection-name'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27835300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档