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

 更新时间:2024年03月27日 09:48:32   作者:ayzen1988  
这篇文章主要介绍了如何使用PHP和Redis实现消息队列功能,文中通过示例代码介绍的非常详细,对大家学习或者使用PHP具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧<BR>

前言

今天,我们继续讲消息队列,如何使用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、编写生产者、消费者代码进行测试验证。

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

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

相关文章

  • 一个PHP验证码类代码分享(已封装成类)

    一个PHP验证码类代码分享(已封装成类)

    验证码的用途就不用多说了,之前也写了一篇关于PHP验证码的文章,PHP 验证码的实现。但是没有封装成类。下面就介绍一个PHP的一个验证码类。
    2011-07-07
  • PHP数组操作简单案例分析

    PHP数组操作简单案例分析

    这篇文章主要介绍了PHP数组操作,结合简单实例形式分析了php数组转换、排序、移除等相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • WordPress中限制非管理员用户在文章后只能评论一次

    WordPress中限制非管理员用户在文章后只能评论一次

    这篇文章主要介绍了WordPress中限制非管理员用户在文章后只能评论一次的方法,同时介绍了判断用户是否为管理员的方法,需要的朋友可以参考下
    2015-12-12
  • html静态页面调用php文件的方法

    html静态页面调用php文件的方法

    这篇文章主要介绍了html静态页面调用php文件的方法,在进行应用程序开发过程中非常具有实用价值,需要的朋友可以参考下
    2014-11-11
  • PHP折半(二分)查找算法实例分析

    PHP折半(二分)查找算法实例分析

    这篇文章主要介绍了PHP折半(二分)查找算法,结合实例形式较为详细的分析了php折半(二分)查找算法的概念、原理、实现与使用方法,并附带了一个php折半(二分)查找算法类供大家参考,需要的朋友可以参考下
    2018-05-05
  • php 更新数据库中断的解决方法

    php 更新数据库中断的解决方法

    使用PHP程序更新数据库,总是到160000条时中断, 查看LOG,显示超过PHP最大执行时间的错误, 只需要在PHP脚本中加入如下语句
    2009-06-06
  • 浅谈PHP无限极分类原理

    浅谈PHP无限极分类原理

    这篇文章主要介绍了PHP无限极分类原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • php验证手机号码

    php验证手机号码

    这篇文章主要介绍了php验证手机号码的方法,验证手机号码通常利用php正则表达试验证了,手机号的规则是长度11位然后是13,15,18等等开头,这个我们只要加以分类规划并可实现完美手机号码验证正则了,需要的朋友可以参考下
    2015-11-11
  • PHP新手NOTICE错误常见解决方法

    PHP新手NOTICE错误常见解决方法

    PHP新手NOTICE错误,特此写给那些遇到和我一样错误的朋友。
    2011-12-12
  • PHP7中新添特性整理

    PHP7中新添特性整理

    在本篇文章里小编给大家整理的是一篇关于PHP7中新添特性的相关内容,对此有兴趣的朋友们可以学习参考下。
    2021-02-02

最新评论