你知道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组条件来看
这对于MapperA来讲的话,在这当中的任何一个条件都没有发生变化,自然而然的就会将原结果返回。
关于mybatis二级缓存缺陷你都了解了吗?
更多mybatis方面的常见问题,请继续关注奇Q工具网来了解吧。
推荐阅读: