PHP使用Redis实战实录5:Redis实现消息队列

这篇具有很好参考价值的文章主要介绍了PHP使用Redis实战实录5:Redis实现消息队列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PHP使用Redis实战实录系列

  • PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案
  • PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
  • PHP使用Redis实战实录3:数据类型比较、大小限制和性能扩展
  • PHP使用Redis实战实录4:单例模式和面向过程操作redis的语法

消息队列实现方案(一)

1.获取数据存入Redis

$CONF = require_once "conf/config.php";
$redis = new Redis();
$redis->connect($CONF['redis_host'], $CONF['redis_port']);
$redis->auth($CONF['redis_auth']);
$redis->select(0);//选择数据库
$goodsId = 30;
$key = "goods_id";

// 循环添加商品
for ($i = 1; $i <= $goodsId; $i++) {
    $redis->rPush($key, $i);
}

2.读取Redis数据进行业务处理

//循环遍历输出;
$j = 1;
while ($j <= $goodsId) {
    $goods_id = $redis->lPop($key);
    if ($goods_id) {
        outQueue($goods_id);
    }
    $j++;
    usleep(1000000);//0.002秒
}

//写入日志
function outQueue($goods_id)
{
    return file_put_contents('logs.txt', $goods_id . " " . date("Y-m-d H:i:s") . PHP_EOL, FILE_APPEND);
}

//查看数据;
$list = $redis->lrange($key, 0, -1);
var_dump($list);

补充知识

1.file_put_contents()函数

file_put_contents() 是一个 PHP 函数,用于将一个字符串写入文件。其语法是:

file_put_contents(string $filename, mixed $data, int $flags = 0, resource $context = null): int|false

参数说明:

  • $filename:要写入数据的文件名。
  • $data:要写入文件的数据,可以是字符串、数组或对象。如果是数组或对象,则会自动转换为 JSON 格式写入。
  • $flags(可选):用于指定文件写入的选项。常用的标志可以是 FILE_APPEND(追加写入)。
  • $context(可选):通常不需要使用,可以传递一个上下文资源。

返回值:

  • 如果成功写入文件,函数将返回写入的字节数。
  • 如果发生错误,函数将返回 false

示例使用:

$data = "Hello, World!";
$file = "example.txt";

if (file_put_contents($file, $data) !== false) {
    echo "数据写入成功";
} else {
    echo "无法写入数据";
}

// 使用 FILE_APPEND 标志追加写入
$moreData = "More data

## 2.while条件循环PHP 中,`while` 循环用于在满足特定条件的情况下重复执行一段代码块。它的基本语法如下:

```php
while (condition) {
    // 循环体代码
}

关键点:

  • condition 是一个布尔表达式,用于定义循环的终止条件。只有在条件为 true 时,循环体中的代码才会执行。
  • 在每次循环迭代之后,条件会重新被判断。如果条件为 false,循环将终止。
  • 循环体内的代码会一直重复执行,直到条件不再满足。
  • 可以在循环体内使用控制语句(如 breakcontinue)来控制循环的行为。

下面是一个使用 while 循环的示例,计算从 1 到 10 的和:

$sum = 0;
$i = 1;

while ($i <= 10) {
    $sum += $i;
    $i++;
}

echo "1 到 10 的和为:" . $sum;

以上代码将依次将 1、2、3、4、5、6、7、8、9、10 累加到 $sum 变量中,并最终输出结果。

sleep()函数

在 PHP 中,sleep() 是一个内置函数,用于使程序休眠指定的秒数。它的语法如下:

sleep(int $seconds): void

参数说明:

  • $seconds:要休眠的秒数,必须是一个正整数。可以是小数,但会被自动转换为最接近的整数。

注意事项:

  • sleep() 函数会暂停当前脚本的执行,以确保脚本在指定的时间间隔内不会继续执行后续代码。
  • sleep() 的单位是秒,因此 $seconds 参数的值应该是大于等于 0 的整数。

示例使用:

echo "开始休眠" . PHP_EOL;
sleep(3);  // 休眠 3 秒
echo "休眠结束" . PHP_EOL;

在上述示例中,程序运行到 sleep(3) 时,会暂停执行 3 秒钟,然后继续执行后续代码。最终输出的结果会包括休眠前后的文本。

需要注意的是,sleep() 函数的使用主要是在命令行脚本或长时间运行的后端任务中,用于模拟等待时间或减少资源的使用。在 Web 应用程序中,过长的休眠时间可能会导致请求超时或造成用户体验不佳,因此需要慎重使用。

usleep()函数

在 PHP 中,usleep() 是一个内置函数,用于使程序休眠指定的微秒数(百万分之一秒)。它的语法如下:

usleep(int $microseconds): void

参数说明:

  • $microseconds:要休眠的微秒数,必须是一个非负整数。

注意事项:

  • usleep() 函数会暂停当前脚本的执行,以确保脚本在指定的时间间隔内不会继续执行后续代码。
  • usleep() 的单位是微秒,即百万分之一秒,因此 $microseconds 参数的值应该是非负整数。

示例使用:

echo "开始休眠" . PHP_EOL;
usleep(2000000);  // 休眠 2 秒 (2,000,000 微秒)
echo "休眠结束" . PHP_EOL;

在上述示例中,程序运行到 usleep(2000000) 时,会暂停执行 2 秒钟(2,000,000 微秒),然后继续执行后续代码。最终输出的结果会包括休眠前后的文本。

需要注意的是,usleep() 函数通常用在需要较精确控制时间间隔的场景中,而不是一般的等待。它一般在一些特定的定时或延时需求中使用,例如在高性能网络服务、多进程或并行计算等方面。对于一般的等待或延时操作,更常见的做法是使用 sleep() 函数。


@漏刻有时文章来源地址https://www.toymoban.com/news/detail-676074.html

到了这里,关于PHP使用Redis实战实录5:Redis实现消息队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用SpringBoot利用Redis实现消息队列

    随着互联网的发展,消息队列的应用越来越广泛。消息队列可以解决系统之间的异步通信问题,提高系统的可靠性和可扩展性。在Java开发中,Redis作为一种高性能的缓存和消息队列系统,被广泛应用。本文将介绍如何使用SpringBoot中利用Redis实现消息队列。 在Redis中,List是一种

    2024年02月14日
    浏览(34)
  • Redis系列14:使用List实现消息队列

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型 追求性能极致:客户端缓存带来的革命 Redis系列8:Bitmap实现

    2024年02月07日
    浏览(39)
  • Redis核心技术与实战-学习笔记(十五):消息队列(Redis的解决方案)

    消息队列: 分布式系统 必备的一个 基础软件 ,能支持 组件通信消息 的 快速读写 Redis本身 支持数据的快速访问 ,满足 消息队列的读写性能需求 消息队列存取消息的过程 在分布式系统中,两个组件要基于消息队列进行通信,一个组件就会把要处理的数据以消息的形式传递

    2023年04月09日
    浏览(48)
  • Redis如何实现消息队列

    Redis可以通过List数据结构实现简单的消息队列。在Redis中,我们可以使用 LPUSH 命令将消息推送到列表的左侧,使用 RPOP 命令从列表的右侧获取消息。这样,就可以实现一个先进先出(FIFO)的消息队列。 下面是一个使用Redis实现消息队列的简单示例: 首先,确保你已经安装了

    2024年02月14日
    浏览(35)
  • redis实现消息队列

    消息队列(Message Queue)是一种常见的软件架构模式,用于在分布式系统中传递和处理异步消息。它解耦了发送消息的应用程序和接收消息的应用程序之间的直接依赖关系,使得消息的发送者和接收者可以独立地演化和扩展。 消息队列的基本原理是发送者将消息发送到一个中

    2024年02月09日
    浏览(32)
  • 基于Redis实现消息队列的实践

    消息队列是一种典型的发布/订阅模式,是专门为异步化应用和分布式系统设计的,具有高性能、稳定性及可伸缩性的特点,是开发分布式系统和应用系统必备的技术之一。目前,针对不同的业务场景,比较成熟可靠的消息中间件产品有RocketMQ、Kafka、RabbitMq等,基于Redis再去实

    2024年02月07日
    浏览(33)
  • SpringBoot+Redis stream实现消息队列

    目录 一、前言 二、下载Redis及引入Redis依赖 三、配置消费者及消费组 四,配置Redsi及初始化stream、消费组、消费者 相较于 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ 等重量级的消息队列中间件,Redis在需求量小的情况下,也可以作为消息中间件来使用。Redis作为消息队列使

    2024年02月16日
    浏览(73)
  • Spring Boot 整合Redis实现消息队列

      本篇文章主要来讲Spring Boot 整合Redis实现消息队列,实现redis用作消息队列有多种方式,比如: 基于 List 的 rpush+lpop 或 lpush+rpop 基于 List 的 rpush+blpop 或 lpush+brpop (阻塞式获取消息) 基于 Sorted Set 的优先级队列 Redis Stream (Redis5.0版本开始) Pub/Sub 机制   不过这里讲的是

    2024年02月13日
    浏览(48)
  • 5. Redis优化秒杀、Redis消息队列实现异步秒杀

    承接Redis - 优惠券秒杀、库存超卖、分布式锁、Redisson文章 代码中有大量数据库的操作,整个业务性能并不是很好 平均耗时达到了497毫秒 首先回顾一下之前秒杀业务的流程 前端发起请求到达我们的Nginx,然后Nginx会把我们的请求负载均衡到我们的tomcat 而在tomcat中执行各种逻辑

    2024年02月13日
    浏览(40)
  • 基于redis stream实现一个可靠的消息队列

    我们使用的库为redisson。 添加元素到队列很简单,用RStream.add方法即可。 如何从队列获取元素?由于我们打算实现kafka那样的consumer group机制,所以,读操作要用RStream.readGroup函数(XREADGROUP命令),该命令有阻塞和非阻塞版本,简单起见,我们使用非阻塞版本(不带BLOCK参数)

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包