mybatis查询缓存

查询缓存

为什么要缓存
如果缓存(内存)中有数据,就不需要从数据库中去查询了,而是直接从内存中拿,大大提供系统性能。

     查询商品ID为1000的商品
              第一次查询时候,去数据库拿,写到内存中、并且返回
              第2、3次,直接内存读,然后返回

什么是查询缓存
Mybatis提供查询,用于减轻数据库的压力,提供数据库的性能。
Mybatis提供一级缓存、和二级缓存
在这里插入图片描述

一级缓存是SQLSession级别的缓存,在操作数据库是需要构建SQLSession对象,在对象有有一个数据接口(hashMap)用于存储缓存数据,不同的SQLSession之间缓存数据区域(hashMap)是互补影响。

二级缓存是Mapper基本的缓存,多个SQLSession去操作同一个Mapper的SQL语句,多个SQLSession可以共用二级缓存,二级缓存是跨SQLSession的。

一级缓存
原理
在这里插入图片描述

实践
在这里插入图片描述
在这里插入图片描述

第一次发起查询用户id为1的用户信息,先去找缓冲中是否有id为1的用户信息,如果没有,从数据库中查询用户,
得到用户信息,将用户信息存储到一级缓存中。
如果SQLSession执行了commit操作(插入、更新、删除),情况SQLSession中的一级缓存,这样做的目的:为了让缓存存储最新的数据,避免脏读。
第二次发起查询用户id为1的用户信息,先去找缓冲中是否有id为1的用户信息,如果有,直接从缓存中获取用户信息。

Mybatis默认支持一级缓存的,不要额外去配置

二级缓存(了解)

Mybatis二级缓存细粒度的数据级别的缓存实现不好。比如,对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次查询都能查询到最新的商品信息,此时如果使用mybatis的二级缓存就无法实现当有一个商品变化时只刷新该商品的缓存,而不是全部商品信息。
因为mybatis的二级缓存区域以Mapper为单位划分的,当有一个商品信息变化,会将所有的商品信息的缓存全部清空。解决此类问题,在业务层根据需求对数据有针对性的缓存。

使用内存数据库来做缓存
Redis、memcache

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值