java开发事故如何处理_记一次缓存事故

善于总结,才能更快进步

通常,我们队高并发的数据都会进行缓存,而且为了防止缓存过大,通常我们都会把缓存设置一个超时时间,并且会有cache miss机制。本文,我记录一下错误的缓存机制引起的BUG。

起因

好好的一个国庆,自己完全没歇停,让我给毁了。线上一次cache miss导致缓存数据错误,便一直在查因。然后重写代码、测试、上线。emmm......

直接看代码

当然是伪代码了

cache = new cache();

data = cache.getData();

if(isempty(data)) {

data = getDataFromResource()

if(!isempty(data)) {

cache.setData(data)

}

}

看上去没错哈,一般我们处理缓存的确是用这个步骤:

读取缓存

若cache miss(超时、网络原因),从数据源读取缓存

重新设置缓存

正常来说,这样的确是没问题的。

但是,请接着往下看。

资源类大致是这样的

//上文getDataFromResource() 就是本类中读取数据

class resource{

private static connection = new Connection();

public static getConnection() {

return connection;

}

public getData() {

try{

//todo:do anythings

data = connection.get();

return data;

}catch(e){

return null;

}

}

}

而我的缓存类是基于资源类的

class cache extends resource {

}

就是说,我缓存类依赖的连接资源,也是我原始资源的来源。

事故原因

当其中某次请求发生错误的时候(比如连接不可用,网络卡顿丢包等等),资源类中的基类方法请求失败,因此返回了NULL。 可能会感觉很奇怪啊,明明我有空校验。但是,业务是复杂的,缓存的数据是从多方资源获取而来,因此,上文getDataFromResource()方法并不为空,而是有部分数据存在。

因此导致了缓存只将部分数据写入失败!!!!!!

解决方式

不要信任数据源一定是正确的,要考虑数据源可能存在不正确的方式(目前处理方式)

if(isempty(data)) {

data = getDataFromResource()

if(!isempty(data)) {

//todo:增加数据校验

if(isValid(data)) {

cache.setData(data)

}else{

//todo:发送邮件通知,告诉开发数据可能不稳定

mail.send();

//todo:抛出异常,控制器处理,本次请求失败

throw Exception();

}

}

}

或者提前计算好缓存,本次cache miss直接抛出异常,不需要计算考虑复杂的逻辑

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

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

相关文章

导轨式网管型工业交换机优势具体在哪里呢?

通过之前的介绍,我们了解到工业交换机可以分为导轨式和机架式、网管型和非网管型结构,那么,导轨式网管型工业交换机具体有哪些优势呢?接下来就由杭州飞畅科技的小编带大家详细了解一下 ,一起来看看吧! 工业…

使用HTTPS和OAuth 2.0保护服务到服务的Spring微服务

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 如果您使用Spring Boot,Spring Cloud和Spring Cloud Config,则…

【渝粤教育】国家开放大学2018年秋季 0017-22T大学英语 参考试题

科目编号:0033 座位号 2018-2019学年度第一学期期末考试 工程数学 试题 2018年 11 月 单选题(本大题共10小题,每小题4分,共计40分) 1.设都是阶矩阵,则下列命题正确的是( &#xff…

【渝粤教育】国家开放大学2018年秋季 0107-21T现代货币金融学 参考试题

科目编号:0133 座位号 2018-2019学年度第一学期期末考试 大学物理 试题 2018年 11 月 单选题(本大题共5小题,每小题4分,共计20分) 静电场的高斯定理表明,静电场是 。 A. 有源场 B. 无源场 C. 保守力场 D.…

java session 同步_session同步

对于大型分布式网站来说,一个业务后面往往对应着多台服务器。用户的请求将在不同的服务器之间进行跳转,这样的情形下,我们就需要保持session在不同服务器之间的同步。1、基于数据库的session共享。原理:使用数据库专门用来存储ses…

二层网络和三层网络的区别

大家经常可以听到二层网络、三层网络的说法,我们这里提到的二层、三层是按照逻辑拓扑结构进行的分类,并不是ISO七层模型中的数据链路层和网络层,而是指核心层、汇聚层和接入层。这三层都部署的就是三层网络结构,二层网络结构没有汇…

从外部CorDapp扩展和覆盖流

Corda 4于上周(2月21日)发布,带来了大量的新功能,使Corda的使用更加愉快。 老实说,我有点假设有很多新功能。 我快速浏览了变更日志,主要是看到我的贡献被引用,但是我记得看到很多文本行。 那一…

【渝粤教育】国家开放大学2018年秋季 0233-21T学前儿童语言教育 参考试题

科目编号:0248 座位号 2018-2019学年度第一学期期末考试 电工电子技术 试题 2019年 1月 一、填空题(每小题 6 分 ,共计30 分) 1.电压是衡量电场力______________ 的物理量,它在数量上等于单位正电荷受电场力作用从电…

工业级光纤收发器的单多模光纤?单多光模块及其用法?

光纤收发器按在光纤中的传输模式可分为:单模光纤和多模光纤,单模光纤收发器和多模光纤收发器最根本的区别就是传输距离远近。今天,就由飞畅科技的小编来为大家介绍下工业级光纤收发器的单/多模光纤的区别?单/多光模块的区别及其应…

【渝粤教育】国家开放大学2018年秋季 0299-21T中国古代文学(1) 参考试题

科目编号:[0314] 座位号 2018-2019学年度第一学期期末考试 兽医基础 试题 2018年 11 月 一、名词解释(本大题共5小题,每小题4分,共计20分) 1.萎缩 2.动脉性充血 3.黄疸 4&#x…

java ee13_一口气了解多线程及其Java实现

进程:进程就是应用程序在内存中分配的空间,也就是正在运行的程序,各个进程之间不干扰。同时进程保存着程序每一个时刻运行的状态。程序:用某种编程语言(java、python等)编写,能够完成一定任务或者功能的代码集合&#…

apache camel_Apache Camel中的断路器模式

apache camel骆驼通常在分布式环境中用于访问远程资源。 远程服务可能由于各种原因和期间而失败。 对于短时间后暂时不可用且可恢复的服务,重试策略可能会有所帮助。 但是某些服务可能会失败或挂起更长时间,从而使调用应用程序无响应且速度缓慢。 防止级…

【渝粤教育】国家开放大学2018年秋季 0505-22T护理学基础 参考试题

科目编号:0529 座位号: 四川电大2018─2019学年度第一学期期末考试 高级英语阅读(1)试题 (开卷) 2019年1月 注 意 事 项 一、 将你的准考证号、学生证号、姓名及分校(工作站)名称填写…

工业级交换机大致可以分为哪几类?

交换机的用途是非常广泛的,可以这样说,只要是需要联网的地方,基本上都会和交换机相关。我们一般把交换机的使用大致为商用和工业级,商用基本上在公司、单位的办公使用比较常见,今天飞畅科技着重为大家介绍一下工业级交…

【渝粤教育】国家开放大学2018年秋季 0630-22T环境法学 参考试题

科目编号:0633 座位号: 2018-2019学年度第一学期期末考试 化工CAD试题 2019年1月 一、试题一(本题50分) 设置绘图环境并绘制如下图框标题栏并保存。 二、试题二(本题50分) 调用图框绘一个平面图形标注…

使用MicroProfile应用隔板和背压

我录制了一段视频,介绍如何使用MicroProfile Fault Tolerance实现隔板和背压。 隔板后面的想法是将应用程序分成几个隔离功能的执行单元。 在企业Java应用程序中,这通常意味着定义多个线程池。 向客户端施加反压将导致向客户端添加有关系统当前压力的信…

【渝粤教育】国家开放大学2018年秋季 0695-21T (1)农业企业经营管理 参考试题

科目编号:[0700] 2018-2019学年度第一学期期末考试 中级会计实务(一) 评分标准 2019年 1 月 以下给出的是参考答案,请酌情给分。 一、单选题(本大题共10小题,每小题3分,共计30分) 1…

matlab 形态学 颗粒_数字图像处理Matlab-形态学图像处理(附代码)

这是一篇基于matlab,数字图像处理的形态学研究与实现的文章,希望能对你产生帮助。我还写了一套《数字图像处理》(冈萨雷斯版本)的学习笔记,欢迎关注我的csdn同名主页,一起学习成长~1.Objectives:1.利用 MATLAB 研究二值…

【渝粤教育】国家开放大学2018年秋季 0717-21T社会保障基础 参考试题

科目编号:[0721] 座位号 2018-2019学年度第一学期期末考试 财务管理实务 试题 2019年 1 月 一、单项选则题(本大题共10小题,每小题3分,共计30分) (★请考生务必将答案填入到下面对应序号的答题框中★&…

视频光端机维护三大步骤

视频光端机分为发射端设备和接收端设备,发射端设备和摄像机一样置于室外,工程人员通常是对发射端设备过行维护测试。对于视频光端机的检修工作,我们一般分为三个步骤来进行测试。接下来就由飞畅科技的小编来带大家详细了解下视频光端机维护的…