mybatis二级缓存缺陷是什么?有什么弊端?

KLQ 2020-06-04 14:52:29 java常见问答 7292

你知道mybatis二级缓存存在着什么缺陷吗?它有着什么样的弊端呢?很多人对于这个问题都不太清楚,下面就一起通过以下的文章内容来了解以下吧。

mybatis二级缓存存在着以下的缺陷。

mybatis二级缓存对于细粒度的数据级别的缓存实现不好。

例如:

现在有以下的需求,对商品的信息进行缓存,商品信息查询访问量较大,但是,要求每次用户都可以查询到最新的商品信息,这个时候,假如使用mybatis二级缓存的话,那么就不能够实现在一个商品发生变化的时候,只去刷新这个商品的缓存信息,而不将其它商品的信息进行刷新,所以,为mybaits二级缓存区域以mapper为单位划分。

在一个商品信息发生变化的时候,会将所有的商品信息的缓存数据全部清空,解决这样的问题的话,就要在业务层依据需求对数据有针对性缓存。

除此之外,mybatis二级缓存使用在某些场景下会出现以下的问题。

假如,有一条select语句,开启了二级缓存

select a.col1, a.col2, a.col3, b.col1, b.col2, b.col3 from tableA a, tableB b where a.id = b.id;

对tableA和tableB的操作定义在两个Mapper当中,分别是MapperA和MapperB。

也就是他们属于两个命名孔空间。

那么,假如在这个时候启用缓存的话,一、MapperA当中,执行上面的sql语句查询这6个字段;二、tableB更新了col1与col2两个字段;三、MapperA再次执行上述sql语句查询这6个字段。

那么这个时候,就会出现问题了,即使是第2步tableB更新了col1与col2两个字段,第3MapperA走二级缓存查询到的这6个字段仍然是原来的这6个字段的值。

这主要是由于从CacheKey的3组条件来看

mybatis二级缓存缺陷

这对于MapperA来讲的话,在这当中的任何一个条件都没有发生变化,自然而然的就会将原结果返回。

关于mybatis二级缓存缺陷你都了解了吗?

更多mybatis方面的常见问题,请继续关注奇Q工具网来了解吧。

推荐阅读:

mybatis缓存的作用是什么?mybatis缓存有几种?

mybatis缓存机制面试都问些什么?mybatis缓存面试题及答案整理!

mybatis返回map结果集该怎么返回?