我正在尝试使用 Laravel Redis 会话驱动程序,问题是 - 它似乎总是假设使用“默认”连接。有谁知道是否可以使用不同的连接?
例如“会话”?所以我所有的会话都在一台服务器上?
此外,每当我在 redis 数组中没有“默认”键时,我都会得到异常。我必须声明一个“默认”连接吗?有自己的名字有什么问题?
例如
看起来没有一种简单的方法可以做你想做的事。基于 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)
返回值。您还需要弄清楚如何让会话处理程序使用您自己的缓存驱动程序。我不知道这有多容易,也不知道你会如何做到这一点 - 尝试将其全部连接起来可能很困难。
有几种方法可以解决这个问题:我将概述你为什么会出错以及如何以简单的方式解决这个问题(以防其他人有同样的问题):
在类的顶部为您的连接创建一个 $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');
将 Config\session.php 中的 session 驱动从 native 改成 redis