mybatis缓存容易产生脏数据,推荐使用第三方缓存:memcached或者redis。

11 篇文章 0 订阅
9 篇文章 0 订阅

mybatis一级缓存中的脏数据:

mybatis的一级缓存:默认是SqlSession级别,只要通过session查过的数据,都会放在session上,下一次再查询相同id的数据,都直接冲缓存中取出来,而不用到数据库里去取了。

产生的脏数据:当有不同的sqlSession在对数据库进行操作,一级缓存只能保证当前sqlSession中的增删改在一级缓存中自动更新,就会产生脏数据。

mybatis二级缓存中的脏数据:

mybatis二级缓存:是SessionFactory级别,和namespace绑定,同一个namespace放到一个缓存对象中,当这个namaspace中执行了非sselect语句的时候,整个namespace中的缓存全部清除掉。

产生的脏数据:引起脏读的操作通常发生在多表关联操作中,比如在两个不同的mapper中都涉及到同一个表的增删改查操作,当其中一个mapper对这张表进行查询操作,此时另一个mapper进行了更新操作刷新缓存,然后第一个mapper又查询了一次,那么这次查询出的数据是脏数据。出现脏读的原因是他们的操作的缓存并不是同一个。

所以,推荐使用第三方缓存:memcached或者redis。

redis中怎么更新缓存避免脏读?

读写部分:

if(redis存在数据){
    读取redis数据
}else{
    数据库读取,同时存redis+设置超时时间

更新部分:

if(数据库update){
    更新redis+设置超时时间
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值