mysql事件 比对昨天数据更新_hibernate一级缓存导致数据不一致

  1. 问题现象

后台数据刷新服务,通过接收消息实时将mysql数据刷入redis中,通过数据库和缓存监控对比,

发现时常会有redis缓存数据未刷新到最新数据;

  1. 问题排查

项目逻辑不是很复杂,导致不一致只有可能是

a. mysql数据更新时,消息未同步发出;

通过数据库里数据更新时间和我这系统接收时间比对,排除了mysql数据和消息不一致的问题

b. 哪里有缓存,导致取到的是老数据;

现在是要验证hibernate查询数据库是否有命中了一级缓存,

首先打开hibernate的sql日志true

执行发现在同一个线程中,调用两次相同查询,只有第一次打出sql日志;基本确定就是一级缓存搞得鬼;

  1. 问题解决

hibernate的一级缓存是在同一个线程中,session相同会导致命中一级缓存,这个一级缓存是无法关闭的,通过查看HibernateTemplate源码发现,我们可以支持强制每次查询创建session;

  • 方法级别的:
b428ebcc0f6f53724607342de3d9d874.png

enforceNewSession强制每次创建session

  • 全局级别的
f14e97c2c5fa07036e8cea0ff089eadc.png

可在生成HibernateTemplate bean是设置该参数为true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值