一次Redis任务队列积压的问题分析与解决

2024-06-16 13:32

本文主要是介绍一次Redis任务队列积压的问题分析与解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前的流程:

 

两个Redis:

Redis1: 存储词条的summary信息

Redis2:任务队列,用于暂存Redis中没有summary,需要进行处理获取summary, 队列用的Redis的list结构

 

两个进程:

1、 进程1:服务进程

接收请求,划内链词,然后从Redis1中去获取词的summary, 如果获取失败,则返回code=4的错误,并将词条id写入任务队列Redis2等待被进程2处理

 

2、进程2:读取Summary的进程

循环从任务队列Redis2中读取词条id,并调用一个A接口获取词条的summary信息,写入Redis1中,并设置过期时间为3天

 

 

最近暴露出来的问题:

      一个请求重复请求很多次后,仍然返回code=4的错误

      但是按照上述逻辑,如果速度够快的话,第一次请求的时候返回code=4的错误,第二次应该是可以拿到数据的

 

分析原因:

      首先查看了Redis1,的确拿不到对应词条的summary信息

      手动获取了summary并存入Redis1后,请求可以获取到数据

      看来的确是因为Redis中获取不到数据而导致的

      看了下Redis2的长度, 居然积压了1000多万!

      的确, 最近 A接口(也就是进程2中获取summary的接口挂掉了很长一段时间), 而且可以观察到,这个Redis2队列的长度仍然在不断升高,一晚上的时间上升了接近40万

      队列长度不断飙升,一方面是因为大量的词条获取不到summary, 导致Redis1大量的miss, 而miss的都会进入到Redis2队列中

      此外,进程1和进程2速度不匹配应该也是一个原因, 进程2只有一个进程在工作,而进程1是有4个进程在工作

 

解决办法:

      提高进程2的数量, 当然在提高进程2的数量的时候,我首先得知道获取summary的A接口的服务能力, 因为我这些进程会调这同一个接口

      于是我用ab压测了下那个接口,服务能力大概在150 QPS, 于是我可以放心的提高我的进程数了

      我将进程数从1提高到了5, 可以看到队列中积压的数据正在逐渐的减少了,大概每秒减少100多个, 这样一天左右,积压的数据就会全部被处理掉 

这篇关于一次Redis任务队列积压的问题分析与解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066586

相关文章

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

Redis Pipeline(管道) 详解

《RedisPipeline(管道)详解》Pipeline管道是Redis提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT),显著提升执行效率... 目录Redis Pipeline 详解1. Pipeline 的核心概念2. 工作原理与性能提升3. 核

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.