【redis 延时队列】使用go-redis的list做异步,生产消费者模式
分享一个用到的,使用go-redis的list做异步,生产消费者模式,接着再用 go 协程去检测队列里是否有东西去消费
如果队列为空,就会一直pop,空轮询导致 cpu 资源浪费和redis qps无效升高,所以可以通过 time.Second 1 秒,降低cpu能耗,和redis的qps
而 BLPop 或者用 BRPop 则是阻塞读
睡眠会导致延迟增大, 因为最大可能延迟 1 s 麻,所以阻塞都意思就是一旦来了就立刻醒过来,延迟几乎为 0
不过也不是非常完美,因为如果一直不来数据,就会一直阻塞在哪里,时间长了,服务器会断开这个连接,减少空闲资源占用,这时候 BLPop 会抛出错误,所以要做一个错误判断和错误处理
func (m *RecordMessageListService) Produce(record cdfield.RecordMessageList) {recordJson, _ := json.Marshal(record)global.GSD_REDIS.RPush(context.Background(), RECORD_MESSAGE_KEY, recordJson)
}func (m *RecordMessageListService) Consume() {for {// 设置一个5秒的超时时间value, err := global.GSD_REDIS.BLPop(context.Background(), 5*time.Second, RECORD_MESSAGE_KEY).Result()if err != nil {// 查询出错time.Sleep(1 * time.Second)continue}var record cdfield.RecordMessageList_ = json.Unmarshal([]byte(value[1]), &record)if record.TableName == "glry" {//消费消息glryRecord := cdfield.CdGlryRecord{Name: record.Name,DocumentNumber: record.IdCard,CreatedAt: record.CreateTime,}valid, res, _ := utils.GetHNMsg(record.Name, record.IdCard, "")if valid {glryRecord.HsTime = res.YwSamplingTime // YwSamplingTime 检验时间glryRecord.HsResult = res.YwCheckStatusglryRecord.HasHsjl = 1}err = glryRecordService.UpdateHesuan(glryRecord)if err != nil {global.GSD_LOG.Error("消费失败", zap.Error(err))continue}} else if record.TableName == "gzry" {//工作人员消费消息workerRecord := cdfield.CdWorkerRecord{Gzrxm: record.Name,Gzrsfz: record.IdCard,CreatedAt: record.CreateTime,}valid, res, _ := utils.GetHNMsg(record.Name, record.IdCard, "")if valid {workerRecord.Hsjl = 1workerRecord.Hsjg = res.YwCheckStatusworkerRecord.Hssj = res.YwSamplingTime}err = cdWorkerService.UpdateWorkerMessageQueue(workerRecord)if err != nil {global.GSD_LOG.Error("消费失败", zap.Error(err))continue}}global.GSD_LOG.Info("消费成功", zap.Any("消费到数据:", value), zap.Any("当前时间是:", time.Now()))time.Sleep(time.Second)}
}相关文章:
【redis 延时队列】使用go-redis的list做异步,生产消费者模式
分享一个用到的,使用go-redis的list做异步,生产消费者模式,接着再用 go 协程去检测队列里是否有东西去消费 如果队列为空,就会一直pop,空轮询导致 cpu 资源浪费和redis qps无效升高,所以可以通过 time.Sec…...
激光焊接塑料多点测试全画面穿透率测试仪
工程塑料由于其具有高比强度、电绝缘性、耐磨性、耐腐蚀性等优点,已广泛应用于各个重要领域。另一方面,工程塑料还具有良好的焊接性,是制成复合材料的基体材料的优良选择,因此目前已成为国内外新型复合材料的研究热点。 工程塑料…...
用 Uno 当烧录器给 atmega328 烧录 bootloader
用 Uno 当烧录器给 atmega328 烧录 bootloader date: 2023-8-10 https://backmountaindevil.github.io/#/hackaday/arduino/isp 引脚接线 把两个板子的 11(MOSI)、12(MISO)、13(SCK)、5V、GND 两两相连,还要把 Uno(烧录器)的 10 接到atmeg…...
spring boot策略模式实用: 告警模块为例
spring boot策略模式实用: 告警模块 0 涉及知识点 策略模式, 模板方法, 代理, 多态, 反射 1 需求概括 场景: 每隔一段时间, 会获取设备运行数据, 如通过温湿度计获取到当前环境温湿度;需求: 对获取回来的进行分析, 超过配置的阈值需要产生对应的告警 2 方案设计 告警的类…...
Camunda 7.x 系列【10】使用 Rest API 运行流程实例
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2. 官方接口文档3. 本地接口文档3.1 Postman3.2 Camunda Platform Run Swagger3.3 S…...
Python-OpenCV中的图像处理-边缘检测
Python-OpenCV中的图像处理-边缘检测 边缘检测Canny算子 边缘检测Canny算子 Canny 边缘检测是一种非常流行的边缘检测算法,是 John F.Canny 在 1986 年提出的。它是一个有很多步构成的算法:噪声去除、计算图像梯度、非极大值抑制、滞后阀值等。 Canny(i…...
一文了解Java序列化和反序列化:对象的存储与传输
一文了解Java序列化和反序列化:对象的存储与传输 作者:Stevedash 发布时间:2023年8月9日 21点30分 前言 Java序列化是一项强大而重要的技术,它允许我们将对象转换为字节流,以便在存储、传输和重建时使用。在本文中&…...
react-codemirror2 编辑器需点击一下或者延时才显示数据的问题
现象: <Codemirror/>组件的数据已经赋上值的情况下,初始状态不渲染数据,需要点击编辑框获取焦点后才展示,或者延迟了几秒才显示出来。 原因: 指定了一些依赖的版本,可能不兼容了一些功能,…...
火山引擎联合Forrester发布《中国云原生安全市场现状及趋势白皮书》,赋能企业构建云原生安全体系
国际权威研究咨询公司Forrester 预测,2023年全球超过40%的企业将会采用云原生优先战略。然而,云原生在改变企业上云及构建新一代基础设施的同时,也带来了一系列的新问题,针对涵盖云原生应用、容器、镜像、编排系统平台以及基础设施…...
需要数电发票接口的,先熟悉下数电发票基本常识
最近有一些技术小伙伴来咨询数电发票接口的时候,对数电发票的一些常识不太了解, 导致沟通起来比较困难。比较典型的这三个问题: 一、开具数电票时,如何设置身份认证频次? 请公司的法定代表人或财务负责人登录江苏省电…...
node-sass是什么
一、Sass(Syntactically Awesome Style Sheets) 是一种CSS预处理器,它扩展了CSS的功能并提供了更强大的样式表语言。Sass允许开发人员使用变量、嵌套规则、混合(Mixins)、继承等高级功能来编写更简洁、可维护的样式代…...
C语言指针之 进阶
前言 今天来较为深入的介绍一下指针,希望大家能有所收获~ 那么,先进行一些简单的基础知识复习吧。 字符指针 格式:char * 补充: 表达式“abcdef”的值是首字符a的地址 所以当像下面这么使用时,它的含…...
C++单例模式
文章目录 1、什么是单例2、一个好的单例应该具备的条件3、懒汉模式与饿汉模式4、单例实现:线程安全、内存安全的懒汉式单例(基于C11的智能指针和互斥锁) 1、什么是单例 单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类…...
C++ 析构函数
析构函数 析构函数于构造函数相对应,构造函数是对象创建的时候自动调用的,而析构函数就是对象在销毁的时候自动调用的 特点: 1)构造函数可以有多个来构成重载,但析构函数只能有一个,不能构成重载 2&…...
CSS——字体选择
在网页设计和开发中,字体选择是一个非常重要的因素。字体不仅仅是文字的表现形式,它们还能够传达出一种特定的情感和风格。在CSS中,我们可以通过使用字体代码来定义网页中使用的字体。 CSS提供了一种简单而灵活的方式来设置字体。通过使用fo…...
SpringBoot自动装配及run方法原理探究
自动装配 1、pom.xml spring-boot-dependencies:核心依赖在父工程中!我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本,就因为有这些版本仓库 1.1 其中它主要是依赖一个父工程,作用是管理项目的资源过滤及…...
Mybatis实现JsonObject对象与JSON之间交互
项目中使用PostGresql数据库进行数据存储,表中某字段为Json类型,用于存储Json格式数据。PG数据库能够直接存储Json算是一大特色,很多特定情境下使用直接存储Json字段数据能够大量节省开发时间,提高后台数据查询和转换效率。 1、基…...
spring boot 集成 jetcache【基础篇:@Cached、@CreateCache、@CacheRefresh】
手打不易,如果转摘,请注明出处! 注明原文:https://zhangxiaofan.blog.csdn.net/article/details/129832925 目录 前言 版本 配置通用说明 项目结构 代码 启动类 实体类 基础使用——增删改查(Cached、CacheInv…...
个人对前后端分离的一些看法
内容简介:前端开发过程中能完全不依赖后端的才是真正的前后端分离指的是工作过程中,前端的的代码中往往会掺杂一些后端的逻辑。后端返回了一个json对象 前端开发过程中能完全不依赖后端的才是真正的前后端分离 指的是工作过程中,前端的的代码…...
TailWindCss 在Hbuilderx中使用
基于这个插件 weapp-tailwindcss 地址 本次说明基于HbuilderX 创建的项目非CLI 安装步骤按照文档走,先安装上几个依赖。然后是几个配置文件 tailwind-input.css tailwind的css文件用来引入到app.vue /* #ifdef H5 */ tailwind base; /* 如果是小程序的话&#x…...
基于Newmark法的车桥耦合动力学求解Matlab程序:不平顺车辆-无砟轨道-桥梁耦合全代码研究
车桥耦合matlab程序。 使用newmark法进行数值积分,考虑不平顺车辆-无砟轨道-桥梁耦合的动力学求解全套代码。无砟轨道-桥梁耦合动力学仿真平台—— 基于 Newmark-β 隐式积分的“车-轨-桥”一体化求解框架一、概述无砟轨道桥梁在高速列车通过时表现出强烈的多体-多尺…...
《空间智能体:下一代AI基础设施》——从视觉识别到空间计算的范式跃迁
《空间智能体:下一代AI基础设施》——从视觉识别到空间计算的范式跃迁摘要(Abstract)近年来,人工智能系统在视觉识别、目标检测与多目标跟踪等任务中取得显著进展。然而,大量研究与工程实践表明,传统基于图…...
全球近7.6万台WatchGuard Firebox设备暴露高危漏洞CVE-2025-9242,远程攻击者无需认证即可执行代码
全球约有7.6万台WatchGuard Firebox网络安全设备暴露在公网上,且尚未修复高危漏洞CVE-2025-9242。远程攻击者无需任何身份验证,即可利用该漏洞执行恶意代码,风险极高。 WatchGuard Firebox T145 Network Security/Firewall Appliance - WGT14…...
LSM6DS0超低功耗六轴IMU硬件原理与嵌入式驱动实战
1. LSM6DS0:面向嵌入式实时系统的六轴惯性测量单元深度解析 LSM6DS0 是意法半导体(STMicroelectronics)于2014年推出的超低功耗、高精度六轴惯性测量单元(IMU),集成三轴加速度计与三轴陀螺仪于单一封装内。…...
GME多模态向量-Qwen2-VL-2B多场景落地:已支持12类垂直领域图文Schema定制扩展
GME多模态向量-Qwen2-VL-2B多场景落地:已支持12类垂直领域图文Schema定制扩展 你是不是经常遇到这样的问题?想找一张图,却只能用文字描述,结果搜出来的图片总是不对劲;或者有一张图片,想找和它内容相关的文…...
保姆级教程:在VS2022里一步步配置Qt 5.15.2源码调试环境(附PDB路径避坑指南)
保姆级教程:在VS2022里一步步配置Qt 5.15.2源码调试环境(附PDB路径避坑指南) 当你兴奋地在Visual Studio 2022中按下F11键,想要深入Qt框架内部一探信号槽的魔法时,调试器却无情地显示"无法加载符号"——这种…...
一文搞懂 Spring Cloud:从入门到实战的微服务全景指南(建议收藏)喝
一、中间件是啥?咱用“餐厅”打个比方 想象一下,你的FastAPI应用是个高级餐厅。 ?? 顾客(客户端请求)来到门口。- 迎宾(CORS中间件):先看你是不是从允许的街区(域名)来…...
ECharts甘特图实战:5步搞定项目进度可视化(附完整代码)
ECharts甘特图实战:5步搞定项目进度可视化(附完整代码) 项目管理中,清晰直观的进度展示往往能事半功倍。ECharts作为国内领先的数据可视化库,其强大的定制能力可以轻松实现专业级甘特图。本文将手把手带你从零开始&…...
ESPS USB MSC 调试全过程记录址
背景 在软件开发的漫长旅途中,"构建"这个词往往让人又爱又恨。爱的是,一键点击,代码变成产品,那是程序员最迷人的时刻;恨的是,维护那一堆乱糟糟的构建脚本,简直是噩梦。 在很多项目…...
Prompt工程已进入“微秒级响应”时代:奇点大会实测数据显示——提示结构优化带来3.7倍推理吞吐提升
第一章:Prompt工程已进入“微秒级响应”时代:奇点大会实测数据总览 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点智能技术大会上,全球首个面向生产环境的Prompt编译器——PromptLLVM v0.9正式发布,并同步公开其端到…...
