如何使用PHP和Redis实现消息队列功能?

本文介绍了如何在PHP项目中利用Docker和Redis搭建消息队列,包括安装Redis、PHPRedis扩展的配置,以及通过生产者和消费者实例展示消息的入队和出队过程。

前言

今天,我们继续讲消息队列,如何使用Redis实现消息队列的功能。

前期准备,需要安装好docker、docker-compose的运行环境。

PHP的项目运行环境可以参考下面的文章内容。

如何使用docker部署php服务-优快云博客

前面我们也讲了PHP和RabbitMQ实现消息队列的功能,感兴趣的可以查看下面的文章。

如何使用PHP和RabbitMQ实现消息队列?-优快云博客

一、安装Redis

1、安装Redis的步骤可以参考下面的文章内容。

Redis不同的持久化方式有什么差异?我们来做个小试验。-优快云博客

二、安装PHP的Redis扩展

1、打开浏览器,找到扩展下载地址,PECL :: Package :: redis

2、进入test1项目容器,执行如下命令。

docker exec -ti test1 sh

3、下载扩展,编译安装,执行如下命令。

wget https://pecl.php.net/get/redis-6.0.2.tgz
tar -xzvf redis-6.0.2.tgz
cd redis-6.0.2/
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

4、增加redis扩展修改php.ini配置,增加如下内容。

extension=redis.so

5、检查扩展是否配置成功,执行如下命令。

php -m|grep redis

返回如下内容,说明已安装完成。

6、至此,PHP的Redis扩展已安装完成。

三、测试验证

1、编写生产者,代码内容如下。

vim producer.php
<?php
// 创建Redis实例
$redis = new Redis();

try {
    // 连接到Redis服务器
    $redis->connect('redis', 6379);
    echo "成功连接到Redis服务器!\r\n";

    // 将消息入队(添加到列表的尾部)
    $datetime = date('Y/m/d H:i:s');
    $message = 'Hello Max!';
    $redis->rPush('message_queue', $message);
    echo "消息已入队,datetime={$datetime},message={$message}\r\n";
} catch (RedisException $e) {
    // 处理连接错误
    echo "无法连接到Redis服务器: " . $e->getMessage();
}

// 关闭Redis连接
$redis->close();

2、编写消费者,代码内容如下。

vim consumer.php
<?php
// 创建Redis实例
$redis = new Redis();

try {
    // 连接到Redis服务器
    $redis->connect('redis', 6379);
    echo "成功连接到Redis服务器!\r\n";

    while (true) {
        // 可以使用BLPOP命令来阻塞等待消息
        $message = $redis->blPop('message_queue', 0); // 0表示无限等待
        if ($message !== null) {
            $datetime = date('Y/m/d H:i:s');
            list($queue, $msg) = $message;
            echo "消息出列,datetime={$datetime},queue=${queue},message=${msg}\r\n";
        }
        usleep(100);
    }
} catch (RedisException $e) {
    // 处理连接错误
    echo "无法连接到Redis服务器: " . $e->getMessage();
}

// 关闭Redis连接
$redis->close();

3、启动消费端,执行如下命令。

php consumer.php

正常情况会返回如下内容,开始监听消息。

4、运行生产端,执行如下命令。

php producer.php

正常情况会返回如下内容。

5、再看消费端接收到的消息,正常返回如下内容。

上面的截图是执行了三次生产端,生成了三条消息。

6、至此,PHP和Redis实现消息队列的功能已验证完成。

总结

其实PHP和Redis实现消息队列的功能,使用的是Redis的List这种数据结构。

使用rPush入列、blPop出列,实现队列的先进先出(FIFO)。

也可以使用lPush入列、blPop出列,来实现队列的先进后出(FILO)。

实现PHP和Redis消息队列的功能,其实就以下三个步骤。

1、安装Redis。

2、安装PHP的Redis扩展。

3、编写生产者、消费者代码进行测试验证。

上面的代码只是做个简单的示例,如果运用到实际的项目当中需要做进一步的优化。

最后因本人能力有限,有什么不对的地方望各位大佬指出好让我改进,多多包含,谢谢大家。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ayzen1988

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值