首页 > 数据库 >如何使用PHP和Redis实现消息队列功能?

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

时间:2024-04-01 11:01:28浏览次数:23  
标签:php 队列 Redis redis message PHP

前言

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

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

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

如何使用docker部署php服务-CSDN博客

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

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

一、安装Redis

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

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

二、安装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,redis,message,PHP
From: https://blog.csdn.net/zhangbin1988/article/details/137033425

相关文章

  • 一个现代化轻量级的跨平台Redis桌面客户端
    大家好,我是Java陈序员。Redis作为一款高性能的非关系型数据库,可是深受开发者的喜爱,无论是什么开发,都能看到Redis的身影。今天,给大家介绍一款跨平台的Redis客户端连接工具,功能强大,界面美观!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机......
  • 【Redis】快速入门 数据类型 常用指令 在Java中操作Redis
    文章目录一、简介二、特点三、下载与安装四、使用4.1服务器启动4.2客户端连接命令4.3修改Redis配置文件4.4客户端图形化界面五、数据类型5.1五种常用数据类型介绍5.2各种数据类型特点六、常用命令6.1字符串操作命令6.2哈希操作命令6.3列表操作命令6.4集合操......
  • 为什么需要php.ini?
    首先,我们得知道PHP是一种编程语言,它可以让网页变得更加动态和有趣。比如,你可以用PHP来创建一个显示“欢迎光临!”的网页,或者制作一个能够计算两个数字相加结果的小工具。那么,php.ini文件是什么呢?它其实就像是PHP语言的一个“设置手册”。在这个手册里,你可以告诉PHP应该怎么去工......
  • PhpStorm安装和破解
    PhpStorm安装和破解安装包获取方式:(关注公众号:爬虫探索者)发送phpstorm获取。解压安装包具体安装方法可以参考操作方法类似,如果有需要的软件,可以评论软件名称,我可以分享一下。pycharm安装和破解......
  • 从 Redis 开源协议变更到 ES 国产化:一次技术自主的机遇
    引言近日,RedisLabs宣布其主导的开源项目Redis将采用双重源代码可用许可证(RSALv2)和服务器端公共许可证(SSPLv1)。这一重大决策标志着Redis从传统的BSD许可证向更加严格的控制权转变,同时也引发了广泛的社区和行业讨论。这不仅是一个关于许可证变更的故事,更是关于开源社区如何......
  • 链式队列实现
    typedefstructlist//创建队列中的链式结构{ datatypedata;//数据域 structlist*next;//指针域}list;typedefstructqueue//创建队列{ list*front;//队头 list*rear;//队尾}queue;voidinitqueue(queue*q)//初始化队列{ q->front=q->rear=(list*)mal......
  • Redission分布式锁介绍和配置引入
        本人在实际项目用于确保Key一致性经常使用的一种加锁方式,帮助分布式环境中互斥访问。很多人问不用锁不是一样完成目标吗?但需要清楚的是这是在高并发的场景下,多节点同时访问缓存的场景,是一般单体项目所无法比拟的,使用锁方式可以控制并发访问,避免缓存击穿和雪崩等问......
  • Redis持久化:RDB与AOF
    redis将数据以键值对的形式存储在内存之中,而内存中的数据会掉电丢失,因此仅仅是把数据存储在内存是无法做到数据持久化的,因此还需要把数据转移到硬盘中去。Redis数据持久化有两只方式:定期备份RDB、实时备份AOF。RDB(RedisDataBase):数据备份存储的位置:(我们可以从redis.conf配置......
  • Python数据结构与算法——数据结构(栈、队列)
    目录数据结构介绍列表栈栈的基本操作:栈的实现(使用一般列表结构即可实现):栈的应用——括号匹配问题队列队列的实现方式——环形队列 队列的实现方式——双向队列 队列内置模块栈和队列应用——迷宫问题栈——深度优先搜索 队列——广度优先搜索数据结构介绍......
  • redis 5.0命令处理流程
    redis5.0命令处理流程初始化事件驱动数据结构:initServer中调用aeCreateEventLoop方法初始化server.el属性,然后调用listenToPort方法设置listen的fd,并为这些fd绑定读事件anetTcpHandler。anetTcpHandler循环1000次accept,然后对于连接调用acceptCommonHandle......