前言
今天,我们继续讲消息队列,如何使用redis实现消息队列的功能。
前期准备,需要安装好docker、docker-compose的运行环境。
php的项目运行环境可以参考下面的文章内容。
前面我们也讲了php和rabbitmq实现消息队列的功能,感兴趣的可以查看下面的文章。
一、安装redis
1、安装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消息队列内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论