php - 为 Laravel 7 安装和配置 PhpRedis

标签 php laravel redis laravel-7 phpredis

配置 Laravel 7 以与 PhpRedis 一起使用
前言
按照 Laravel 的建议,在互联网上搜索并试图弄清楚如何正确安装和使用 PhpRedis 之后,我无法找到一个单一的事实来源或指南,这不会给我留下比答案更多的问题。
我希望在社区的帮助下,在这里创建并不断改进该指南。
本指南的目标

  • 提供分步指南,以最正确和面向 future 的方式在 Homestead 上为 Laravel 7 安装和配置 PhpRedis。
  • 现在解释如何使用 Redis 安装/配置了 PhpRedis。

  • 为什么不直接使用 Predis?
    根据 Laravel 7 文档,Predis 似乎已被放弃,在 Laravel 的 future 版本中,它可能不再受支持。此外,PhpRedis 的性能优于 Predis。
    PhpRedis vs Predis: Comparison on real production data
    引用
    How to Install PhpRedis for Laravel on Ubuntu
    PhpRedis in Laravel - Redis Series Episode 2
    Installing PHP REDIS PHP7 Branch On Fresh Install Homestead PHP7
    Laravel 7 Redis Docs

    在 Homestead 上全新安装的 Laravel 7 上安装/配置 PhpRedis
    本指南假设您在 Homestead 开发环境中使用 Laravel 7。
    安装 PHPRedis 包。
    1. SSH 进入你的家园。
    $ vagrant ssh
    
    2、下载PhpRedis包。
    $ wget https://github.com/phpredis/phpredis/archive/master.zip
    
    注意:此链接可能已被弃用。如果是,请检查最新版本
    https://github.com/phpredis/phpredis/releases
    
    下载完成后,您应该使用命令 ls 看到一个名为 master.zip 的文件。 .
    3.从master.zip中解压phpredis-master文件夹,然后删除master.zip。将提取的文件夹移动到您的/etc/目录。然后导航到提取的 phpredis-master 文件夹。
    $ unzip master.zip
    $ rm master.zip
    $ sudo mv phpredis-master/ /etc/
    $ cd /etc/phpredis-master/
    
    4.为PhpRedis PHP扩展准备构建环境。
    $ phpize
    $ ./configure
    $ make && make install
    
    如果您收到错误 recipe for target 'install-modules' failed ,使用须藤
    $ sudo make instsall
    
    5. 使用 Vim 或您喜欢的编辑器更新 redis.ini 文件。
    确保将 7.4 替换为您正在使用的 PHP 版本。您可以通过运行 php -v 来检查.就我而言,它返回了 PHP 7.4.4。然后我跑了 ls /etc/php/列出我的 PHP 文件夹并找到/etc/php/7.4/目录。
    $ sudo vim /etc/php/7.4/fpm/conf.d/redis.ini
    
    您现在应该在 Vim 编辑器中打开了该文件。复制下面的行,然后在 Vim 中按 i 开始插入。然后通过右键单击并选择粘贴或按 Shift+Ins 进行粘贴。

    extension=/etc/phpredis-master/modules/redis.so


    添加该行后,按 Esc 退出编辑模式,然后按 :wq 和 Enter 保存并退出。
    6.重启服务
    确保您位于/etc/phpredis-master/目录中
    同样,将 7.4 替换为您正在使用的 PHP 版本。
    $ sudo service php7.4-fpm restart
    $ sudo service nginx restart
    
    7. 确保一切正常。
    $ sudo nginx -t
    
    如果成功,这应该输出以下内容。

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful


    配置 Laravel 7 以使用 PhpRedis。
    您现在应该在您的服务器上安装了 PhpRedis。我们现在将配置 Laravel 以开始使用 PhpRedis。
    1. 将Redis别名更改为RedisManager。
    打开 config/app.php 然后在 aliases 数组中将 Redis 更改为 RedisManager
    'aliases' => [
        ...
        'RedisManager' => Illuminate\Support\Facades\Redis::class,
        ...
    ]
    
    您可以将 Redis 重命名为 RedisManager 以外的名称,但为了保持一致性,我只是按照 Laravel 文档中的建议进行操作。
    测试Redis是否正常工作
    将以下内容添加到您的 web.php 路由文件,然后导航到应用程序中的路由。
    Route::get('/redis', function () {
        $app = RedisManager::connection();
        $app->set('key', 'Testing PhpRedis');
        echo $app->get('key');
    });
    
    导航到 yoursite.local/redis 时,您应该会看到消息“正在测试 PhpRedis”。
    在您的项目中使用 Redis
    安装 PhpRedis 并更新 Laravel 配置后,您现在应该可以开始在项目中使用 Redis。
    在您的 Controller 中使用 Redis
    // ExampleController.php
    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use RedisManager;
    
    class ExampleController extends Controller
    {
        public function index()
        {
            $visits = RedisManager::incr('visits');
    
            return $visits;
        }
    }
    

    常问问题
    为什么我们必须将 Redis 别名重命名为 RedisManager?
    再说一遍,既然 Laravel 7 默认使用 PhpRedis,为什么我们要把 Redis 别名重命名为 RedisManager?
    将 Redis 别名重命名为 RedisManager 将如何影响我的应用程序以及我如何使用它?
    Laravel 7 说 PhpRedis 是默认的,那我为什么要这样做呢?
    我已经成功地让 PhpRedis 在本地工作,但是当我在 Vapor 上部署时,它不起作用。我该怎么办?
    如果我不使用 Homestead 怎么办?

    去做
  • 研究是否使用 $ wget https://github.com/phpredis/phpredis/archive/master.zip 下载 PhpRedis 包是安装软件包的最佳方式,或者如果有更好的选择,例如可能通过 PECL 安装。
  • 最佳答案

    您可以使用以下命令简化安装 PHPRedis 的部分:

    vagrant ssh
    sudo apt-get install php-redis
    sudo apt-get install php8.0-redis
    
    上面的示例将首先安装默认模块 PHPRedis,然后安装 PHPRedis 扩展的特定 PHP 版本。所以这个例子是针对 PHP 8.0 的,如果你需要一个 PHP 7.3 版本,你应该改变 php8.0-redis进入 php7.3-redis .

    关于php - 为 Laravel 7 安装和配置 PhpRedis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62475112/

    相关文章:

    php - 在 PHP 中从远程服务器检索文件时处理延迟

    javascript - 提交表单后如何留在页面上

    php - 拉维尔 5 : Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

    php - Eloquent ORM 和 Laravel 中的连接问题

    node.js - 用于聊天应用程序的nodejs的memcache vs redis

    python-2.7 - redis:匹配散列的部分键

    php - PDO 将记录分成两半

    Laravel 反向路由的好处

    php - Laravel withCount() 子查询

    redis - 成员 : How is insertion order decided?