1


我正在尝试使用 Laravel Redis 会话驱动程序,问题是 - 它似乎总是假设使用“默认”连接。有谁知道是否可以使用不同的连接?

例如“会话”?所以我所有的会话都在一台服务器上?

此外,每当我在 redis 数组中没有“默认”键时,我都会得到异常。我必须声明一个“默认”连接吗?有自己的名字有什么问题?

例如

Redis 连接

4

3 回答 3

2

看起来没有一种简单的方法可以做你想做的事。基于 Redis 的会话驱动程序使用基于 Redis 的缓存驱动程序:

http://laravel.com/api/source-class-Illuminate.Cache.RedisStore.html#5-155

不幸的是,它没有提供任何方法来指定要使用的连接 - 它只使用默认连接:

http://laravel.com/api/source-class-Illuminate.Redis.Database.html#3-96

(对上述类的魔术方法调用直接进入默认连接)

获得所需内容的一种可能方法是编写自己的类,该类使用构造函数扩展 RedisStore,该构造函数接受连接名称并设置$this->redis为任何Redis::connection($name)返回值。您还需要弄清楚如何让会话处理程序使用您自己的缓存驱动程序。我不知道这有多容易,也不知道你会如何做到这一点 - 尝试将其全部连接起来可能很困难。

于 2013-08-06T06:15:42.887 回答
1

有几种方法可以解决这个问题:我将概述你为什么会出错以及如何以简单的方式解决这个问题(以防其他人有同样的问题):

  • 在 vendor/laravel/framework/src/illuminate/Redis/Database.php 打开
  • 在类的顶部为您的连接创建一个 $name 变量

    类数据库{

    /**
     * The host address of the database.
     *
     * @var array
     */
    protected $clients;
    protected $name;
    
  • 更改连接功能以期望您自己的“默认”回退并“设置当前连接的名称”。

    (抱歉无法正确格式化这段代码,因此屏幕截图)

  • 在命令方法上,您需要提供“新连接名称”($this->name)而不是默认名称。

在此处输入图像描述

而已!

现在,您可以从应用程序的任何位置使用“Redis”外观访问您的连接,如下所示:

REDIS::CONNECTION('small');
REDIS::CONNECTION('large');
REDIS::CONNECTION('session');
REDIS::CONNECTION('etc');
于 2015-02-17T13:00:44.733 回答
-3

将 Config\session.php 中的 session 驱动从 native 改成 redis

于 2013-08-05T20:40:34.933 回答