当前位置: 代码网 > it编程>编程语言>Php > 使用PHP和Redis实现消息队列功能

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

2024年05月15日 Php 我要评论
前言今天,我们继续讲消息队列,如何使用redis实现消息队列的功能。前期准备,需要安装好docker、docker-compose的运行环境。php的项目运行环境可以参考下面的文章内容。前面我们也讲了

前言

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

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

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、编写生产者、消费者代码进行测试验证。

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

到此这篇关于使用php和redis实现消息队列功能的文章就介绍到这了,更多相关php redis消息队列内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com