周末在家值班,解决几个月前遗忘的Bug

news2024/11/23 13:04:22

问题:

周末被迫在家值班,无聊之际打开尘封已久的Bug清单,发现有Bug拖了几个月还没解决…
场景是这样子的,有个功能是拿Redis缓存热点数据进行展示,暂且称它为功能A,有个另外的功能B,它会去更新缓存中这个热点数据,另外有定时任务去执行缓存数据持久化
按理说这样子设计是没得问题的。不会出现数据一致性问题(信誓旦旦


现象:

可是问题就出在功能B更新缓存数据后,功能A展示的还是旧数据,且查看Redis缓存数据是已经更新了的 !
那为啥功能A还能拿到旧的缓存数据呢?而且还是有时会有时不会!搁着给我卡bug是吧!
当时硬是没排查出原因,把问题定位在了网络请求不稳定上面,因为控制台报了 Command timed out after 8 second(s) 这个问题,有时候请求一直掉队!
哎。后面就只是记录下来这个问题,没再去探究过了,直至今天有幸,公司给了这个“值班”机会,我才又重新去针对它!


原因

我使用了Java的stream流式操作,但是忘记加终止操作,导致流式操作过程并没有执行,所以我功能A从缓存拿数据就是不可能的!
那为啥有时候有可以了呢 ?!?
🐎嘚,我还有个定时任务呢,一分钟执行一次!靠了,当时没记起来这茬,行,马上给你这流式计算终止掉!
可恶啊,忘记去collect 终止操作来将stream映射的结果进行收集了,小样,拿捏你!
stream在Java中是一种延迟计算的操作,只有遇到终止操作,才会触发中间操作


解决步骤:

1、终止流式计算
2、排查新问题,空指针!

一、终止流式计算

在代码块后面加collect(Collectors.toList())收集结果即可
当我信誓旦旦去启动项目时,访问报错空指针…

二、排查新问题

空指针还不好解决么?小菜一碟!

我有一个map,键值对类型是Map<String, Integer>
在流式计算中,我使用get(key)方式去拿map中的value
因为拿到的数据是个Integer,我对象的属性是long类型,所以我给他转了一下。这玩意你跟我说会失败,开玩笑咯。
结果返回null…

难道真的是我map缓存中没有此值吗?

我在方法执行开头 和 流式计算里面都打印map信息
Map.forEach((key,val) -> log.info("Map:{}","key:"+key+";val:"+val))

结果你猜怎么着,数据一样,我的天

奇了怪了,咋地会发生这种逆天的事情呢?

问了一下GPT,他说这个现象很奇怪🤣

在这里插入图片描述

后面还是死活找不到问题,上了个厕所回来后发现我tm对象的id属性是long类型的,我拿一个long类型的值去一个key是String类型的map去查,查都出东西就有鬼咯!肯定得先toString一下再去查啊!

Map.get(obj.getId().toString()).longValue(); 这样子才是正确的啊!
起初用的Map.get(obj.getId()).longValue(); 疯了已经…

这代码敲的属实太不严谨了那时候,人都给看懵了,还好,问题终于解决!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/841916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(文章复现)建筑集成光储系统规划运行综合优化方法matlab代码

参考文献&#xff1a; [1]陈柯蒙,肖曦,田培根等.一种建筑集成光储系统规划运行综合优化方法[J].中国电机工程学报,2023,43(13):5001-5012. 1.基本原理 本文建立的双层耦合模型内、外层分别对应求解容量配置与能量调度问题。外层模型设置光伏与储能容量备选集并将容量配置组合…

【基础类】—原型链系统性知识

一、创建对象有几种方法 字面量创建对象 1-1. 什么是字面量 字面量就是所见即所&#xff0c;指的是常量&#xff1b;用来为变量赋值时的常数量 代码例子&#xff1a;123&#xff1b;‘ABC’, {name: ‘张三’}, undefined &#xff0c; true 生活例子&#xff1a;门店的招牌&a…

Docker安装Mysql、Redis、nginx、nacos等环境

相关系列文章&#xff1a; 1、DockerHarbor私有仓库快速搭建 2、DockerJenkinsHarbor 1、服务器 Ip部署内容说明192.168.88.7Docker、Mysql、redis、nacosnode1192.168.88.8Docker、Mysql、redis、nacosnode2192.168.88.9Docker、redis、nacos、nginxnode3 2、安装PXC8.0 Mys…

【已解决】Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据

&#x1f389;工作中遇到这样一个需求场景&#xff1a;由于ES数据库中历史数据过多&#xff0c;占用太多的磁盘空间&#xff0c;需要定期地进行清理&#xff0c;在一定程度上可以释放磁盘空间&#xff0c;减轻磁盘空间压力。 &#x1f388;在经过调研之后发现&#xff0c;某服务…

AI一键生成短视频

AI一键生成推文短视频 阅读时长&#xff1a;10分钟 本文内容&#xff1a; 结合开源AI&#xff0c;一键生成短视频发布到常见的某音&#xff0c;某手平台&#xff0c;狠狠赚一笔 前置知识&#xff1a; 1.基本的 python 编程知识 2.chatGPT 使用过 3.stable diffution 使用过 成果…

一键开启ChatGPT“危险发言”

‍ ‍ 大数据文摘授权转载自学术头条 作者&#xff1a;Hazel Yan 编辑&#xff1a;佩奇 随着大模型技术的普及&#xff0c;AI 聊天机器人已成为社交娱乐、客户服务和教育辅助的常见工具之一。 然而&#xff0c;不安全的 AI 聊天机器人可能会被部分人用于传播虚假信息、操纵舆…

冠达管理:稳增长政策密集加码 顺周期板块有望持续表现

上星期A股商场回暖显着&#xff0c;首要宽基指数大都震荡收涨&#xff1b;日均成交额上升至约9600亿元&#xff1b;北向资金延续净买入&#xff0c;周净买入A股124.7亿元。职业层面&#xff0c;方针预期催化下&#xff0c;顺周期方向的金融、房地产等职业领涨。 机构以为&#…

方法区内存溢出及常量池

22 方法区-定义 是所有线程共享的一块区域。 存储了和类结构相关信息。运行时常量池&#xff0c; 方法区在虚拟机启动时被创建&#xff0c;逻辑上是堆的组成部分。方法区内存不足&#xff0c;也会导致oom异常。 是一个概念上的东西&#xff0c; 1.6使用永久代作为方法区&#…

Mybatis引出的一系列问题-spring多数据源配置

在日常开发中我们都是以单个数据库进行开发&#xff0c;在小型项目中是完全能够满足需求的。但是&#xff0c;当我们牵扯到像淘宝、京东这样的大型项目的时候&#xff0c;单个数据库就难以承受用户的CRUD操作。那么此时&#xff0c;我们就需要使用多个数据源进行读写分离的操作…

在Linux服务器上搭建Git

环境 服务器&#xff1a;Ubuntu 客户端&#xff1a;Win11 1、在服务器上安装Git&#xff08;服务器中处理&#xff09; 在服务器上执行git --version 如果出现&#xff1a; 则&#xff0c;已经安装Git&#xff0c;跳过此步骤。 如果没有&#xff0c;则&#xff1a; 执行…

前端个人年度工作述职报告(二十篇)

前端个人年度工作述职报告篇1 尊敬的各位领导、各位同仁&#xff1a; 大家好!按照20__年度我公司就职人员工作评估的安排和要求&#xff0c;我认真剖析、总结了自己的工作情况&#xff0c;现将本人工作开展情况向各位领导、同仁做以汇报&#xff0c;有不妥之处&#xff0c;希…

ElasticSearch详细操作

ElasticSearch搜索引擎详细操作以及概念 文章目录 ElasticSearch搜索引擎详细操作以及概念 1、_cat节点操作1.1、GET/_cat/nodes&#xff1a;查看所有节点1.2、GET/_cat/health&#xff1a;查看es健康状况1.3_、_GET/_cat/master&#xff1a;查看主节点1.4、GET/_cat/indices&a…

内存快照:宕机后,Redis如何实现快速恢复?RDB

AOF的回顾 回顾Redis 的AOF的持久化机制。 Redis 避免数据丢失的 AOF 方法。这个方法的好处&#xff0c;是每次执行只需要记录操作命令&#xff0c;需要持久化的数据量不大。一般而言&#xff0c;只要你采用的不是 always 的持久化策略&#xff0c;就不会对性能造成太大影响。 …

OpenAI因担心隐私问题而阻止GPT-4图像功能的发展

据《纽约时报》报道&#xff0c;GPT-4的图像能力可以识别某些个人。 OpenAI一直在测试其支持图像识别的多模态GPT-4版本&#xff0c;以便计划中的广泛发布。然而&#xff0c;据周二《纽约时报》报道&#xff0c;出于对其可能识别特定个体的担忧&#xff0c;公众访问被限制了。…

(2023国赛必看)零基础挑战一周拿下数学建模国奖

1、 数学建模国赛介绍 1.1 数学建模国赛是什么&#xff1f;如何评奖 全国大学生数学建模竞赛是全国高校规模最大的课外科技活动之一。该竞赛每年9月&#xff08;一般在上旬某个周末的星期五至下周星期一共3天&#xff0c;72小时&#xff09;举行&#xff0c;竞赛面向全国大专院…

使用vscode远程登录以及本地使用的配置(插件推荐)

1、远程登陆ssh 1.1打开vscode插件商店&#xff0c;安装remote-ssh插件 远程ssh添加第三方插件&#xff1a;vscode下链接远程服务器安装插件失败、速度慢等解决方法_vscode远程安装不上扩展_Emphatic的博客-CSDN博客 转到定义&#xff0c;选中代码->鼠标右键->转到定义…

Linux:在使用UEFI固件的计算机上内核是如何被启动的

前言 启动计算机通常不是一件难事&#xff1a;按下电源键&#xff0c;稍等片刻&#xff0c;你就能看到一个登录界面&#xff0c;再输入正确的密码&#xff0c;就可以开启一天的网上冲浪之旅了。 但偶尔这件事没那么顺利&#xff0c;有时候迎接你的不是熟悉的登录界面&#xf…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现[五]

文章目录 SSM--功能实现实现功能09-带条件查询分页显示列表需求分析/图解思路分析代码实现测试分页条件查询带条件分页查询显示效果 实现功能10-添加家居表单前端校验需求分析/图解思路分析代码实现完成测试测试页面效果 实现功能11-添加家居表单后端校验需求分析/图解思路分析…

【HTML】<input>

分类 text password number button reset submit hidden radio checkbox file image color range tel email&#xff08;火狐有校验&#xff0c;360浏览器无校验。&#xff09; url datetime&#xff08;火狐、360浏览器不支持&#xff09; search date、month、week、time、da…

计算机网络-三种交换方式

计算机网络-三种交换方式 电路交换(Circuit Switching) 电话交换机接通电话线的方式称为电路交换从通信资源分配的角度来看&#xff0c;交换(Switching)就是按照某种方式动态的分配传输线路的资源 电话交换机 为了解决电话之间通信两两之间连线过多&#xff0c;所以产生了电话…