【问题标题】:Configuring PhpRedis in Laravel 7在 Laravel 7 中配置 PhpRedis
【发布时间】:2020-06-18 14:48:44
【问题描述】:

我已经在 Homestead 中安装了全新的 Laravel,并且按照 Laravel 文档 https://laravel.com/docs/7.x/redis#phpredis 中的建议安装了 PhpRedis。

我按照这个指南安装 PhpRedis https://webstoked.com/install-phpredis-laravel-ubuntu/

在 Laravel 文档和我为安装 PhpRedis 链接的指南中,我被指示在 config/app.php 中重命名 Redis 别名。

如果您计划将 PhpRedis 扩展与 Redis Facade 别名一起使用,则应将其重命名为其他名称,例如 RedisManager,以避免与 Redis 类发生冲突。您可以在 app.php 配置文件的别名部分执行此操作。
- Laravel 文档

为了进一步增加我的困惑,Laravel 文档接着说你应该完全删除别名。

为避免与 Redis PHP 扩展本身发生类命名冲突,您需要从应用配置文件的别名数组中删除或重命名 Illuminate\Support\Facades\Redis 外观别名。通常,在使用 Redis PHP 扩展时,您应该完全删除此别名,并且仅通过其完全限定的类名引用外观。
- Laravel 文档

我的主要问题是:

  1. “如果您计划将 PhpRedis 扩展与 Redis Facade 别名一起使用”是什么意思?
  2. 我应该在什么时候重命名别名、将其删除或保持原样?
  3. 取决于我是否重命名或删除别名,这将如何影响使用 Redis?

【问题讨论】:

    标签: laravel redis phpredis laravel-facade


    【解决方案1】:

    在 laravel 项目中使用 redis 有两种不同的配置/方式。

    1. 第一个是使用predis,它位于您的vendor 文件夹中。这是“用于 PHP 和 HHVM 的灵活且功能齐全的 Redis 客户端”,位于 here。这是一个用php编写的包/库。
    2. 另一种方法是使用PhpRedis,它是用C 编写的扩展名,位于here
    protected function connector()
    {
        switch ($this->driver) {
            case 'predis':
                return new Connectors\PredisConnector;
            case 'phpredis':
                return new Connectors\PhpRedisConnector;
        }
    }
    

    1. “如果您打算将 PhpRedis 扩展与 Redis Facade 别名一起使用”是什么意思?

      在框架中有一个check。在创建 Redis 的 PhpRedis client 时,它正在检查 new Redis 实例是否为 Facade,因为 PhpRedis 也使用 Redis 名称,您可以从 here 中看到。所以如果你想在你的 laravel 框架中使用 PhpRedis,你最好重命名你的外观,因为它会导致冲突。

    2. 我什么时候应该重命名别名、删除它或保持原样?

      如果您打算使用predis 作为客户端,那么您可以保持原样。如果您打算使用PhpRedis 作为客户端,那么您需要重命名别名。

    3. 根据我是否重命名或删除别名,这将如何影响使用 Redis?

      如果您选择 PhpRedis,您将使用RedisManager::someMethod()。如果你使用 predis,你将使用Redis::someMethod()

    【讨论】:

    • 感谢您的回复!不过,我仍然很困惑 =/ 我在 config/app.php 文件中将别名重命名为 RedisManager。然后我尝试在我的控制器中使用它 ``` $visits = RedisManager::incr('visits');返回 $visits; ``` 但我得到:找不到类 'Illuminate\Support\Facades\RedisManager'。我尝试添加 use Illuminate\Support\Facades\RedisManager;也一样,但我得到了同样的错误。
    • 不是说我更开明了,而是我发现我不能使用'use Redis',而是必须使用'use Illuminate\Support\Facades\Redis;'。所以我做了相反的事情并改变了'use Illuminate\Support\Facades\RedisManager;'只是“使用 RedisManager”,它似乎正在工作。
    • @Josh 这取决于您的client 选择 - 实际上它不会改变外观 - 外观会相同但别名会不同。我认为您通过use RedisManager 使它工作。
    猜你喜欢
    • 2020-10-09
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2012-04-28
    • 2013-07-28
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多