设为首页收藏本站
天天打卡

 找回密码
 立即注册
搜索
查看: 95|回复: 16

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

[复制链接]

3

主题

54

回帖

175

积分

注册会员

积分
175
发表于 2024-4-19 20:16:58 | 显示全部楼层 |阅读模式
目录


前言

今天,我们继续讲消息队列,如何使用Redis实现消息队列的功能。
前期准备,需要安装好docker、docker-compose的运行环境。
PHP的项目运行环境可以参考下面的文章内容。
如何使用docker部署php服务
前面我们也讲了PHP和RabbitMQ实现消息队列的功能,感兴趣的可以查看下面的文章。
如何使用PHP和RabbitMQ实现消息队列?

一、安装Redis

1、安装Redis的步骤可以参考下面的文章内容。
Redis不同的持久化方式有什么差异?我们来做个小试验。

二、安装PHP的Redis扩展

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

2、进入test1项目容器,执行如下命令。
  1. docker exec -ti test1 sh
复制代码
3、下载扩展,编译安装,执行如下命令。
  1. wget https://pecl.php.net/get/redis-6.0.2.tgz
  2. tar -xzvf redis-6.0.2.tgz
  3. cd redis-6.0.2/
  4. phpize
  5. ./configure --with-php-config=/usr/local/php/bin/php-config
  6. make && make install
复制代码
4、增加redis扩展修改php.ini配置,增加如下内容。
  1. extension=redis.so
复制代码
5、检查扩展是否配置成功,执行如下命令。
  1. php -m|grep redis
复制代码
返回如下内容,说明已安装完成。

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

三、测试验证

1、编写生产者,代码内容如下。
  1. vim producer.php
  2. <?php
  3. // 创建Redis实例
  4. $redis = new Redis();

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

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

  18. // 关闭Redis连接
  19. $redis->close();
复制代码
2、编写消费者,代码内容如下。
  1. vim consumer.php
  2. <?php
  3. // 创建Redis实例
  4. $redis = new Redis();

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

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

  23. // 关闭Redis连接
  24. $redis->close();
复制代码
3、启动消费端,执行如下命令。
  1. php consumer.php
复制代码
正常情况会返回如下内容,开始监听消息。

4、运行生产端,执行如下命令。
  1. 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消息队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

2

主题

41

回帖

127

积分

注册会员

积分
127
发表于 2024-5-31 06:58:55 | 显示全部楼层
我想了解更多
  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:14
  • 最近打卡:2024-04-23 11:54:33

0

主题

129

回帖

497

积分

中级会员

积分
497
发表于 2024-6-11 00:42:34 | 显示全部楼层
我想了解更多

0

主题

71

回帖

143

积分

注册会员

积分
143
发表于 2024-7-9 14:38:02 | 显示全部楼层
牛逼

0

主题

74

回帖

147

积分

注册会员

积分
147
发表于 2024-7-24 07:56:05 | 显示全部楼层
感谢分享,受益匪浅!
  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:20
  • 最近打卡:2024-04-19 21:31:53

1

主题

48

回帖

142

积分

注册会员

积分
142
发表于 2024-8-10 04:19:53 | 显示全部楼层
这个话题真是有趣,我也对它感兴趣。

1

主题

63

回帖

146

积分

注册会员

积分
146
发表于 2024-8-24 16:56:37 | 显示全部楼层
谢谢你的提醒,我会注意的。

1

主题

60

回帖

142

积分

注册会员

积分
142
发表于 2024-8-25 12:46:20 | 显示全部楼层
非常感谢你的观点,让我受益良多!

1

主题

47

回帖

114

积分

注册会员

积分
114
发表于 2024-9-1 02:09:38 | 显示全部楼层
我们一起努力,共同解决问题吧。

0

主题

47

回帖

92

积分

注册会员

积分
92
发表于 2024-9-2 17:34:42 | 显示全部楼层
666666666666666666
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|爱云论坛 - d.taiji888.cn - 技术学习 免费资源分享 ( 蜀ICP备2022010826号 )|天天打卡

GMT+8, 2024-11-24 11:38 , Processed in 0.097726 second(s), 27 queries .

Powered by i云网络 Licensed

© 2023-2028 正版授权

快速回复 返回顶部 返回列表