IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 数据库有记录,但是查询不到记录-mybatis的缓存 -> 正文阅读

[大数据]数据库有记录,但是查询不到记录-mybatis的缓存

背景:系统中积分下发是异步操作,即系统调用对接方接口下发指定数目积分,接口返回订单号,然后再通过mq回调告知最终下发结果。本系统为了留底,调用对接方接口下发积分前会将下发记录写入流水表,待接口返回订单号后将订单号更新至流水表中。MQ回调时再依据对接方返回的订单号将流水表中的状态更新为下发成功或失败。

问题:服务层加了事务,由于其他的bug导致整个服务层回滚,但是积分下发是接口下发,且是跨系统,所以无法回滚。导致积分多发。

解决方法:由于事务回滚,导致积分下发流水表无记录,所以在MQ回调处理逻辑中,根据订单号查询是否有此订单,如果有,就正常更新,如果没有,就将积分进行回收。但是由于服务层有逻辑处理,经常会遇到服务层事务还未提交,MQ回调就过来了,导致正常情况下,流水表查不到记录。为了解决这个问题,在MQ回调逻辑中查不到流水记录后将线程睡1s,后再次查询流水记录,如果还是没有再进行回收操作。

问题:做了两次查询操作,但是查询结果一模一样,都查不到数据。在本地进行测试,在sleep处打上断点,先让第一次查询不到,在断点处在数据库插入一条流水,然后放开断点,发现查不到该流水记录。

原因:通过mybatis-sql-log插件发现,第二次查询没有打印sql,百度发现,这是由于mybatis一级缓存导致的。mybatis的一级缓存是基于sqlSession的,mybatis在查询前会查询缓存,如果sql一模一样就不会查询db,直接返回缓存中的数据。可以再xml查询中加上flushCache="true"不使用缓存

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:24:30  更:2021-11-22 12:25:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:30:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码