脏数据的产生和避免

二级缓存虽然能提高应用效率,减轻数据库服务器的压力,但是如果使用不当,很容易产生脏数据。这些脏数据会在不知不觉中影响业务逻辑,影响应用的实效,所以我们需要了解在 MyBatis 缓存中脏数据是如何产生的,也要掌握避免脏数据的技巧。

MyBatis 的二级缓存是和命名空间绑定的,所以通常情况下每一个 Mapper 映射文件都拥有自己的二级缓存,不同 Mapper 的二级缓存互不影响

该如何避免脏数据的出现呢?

这时就需要用到参照缓存了。当某几个表可以作为一个业务整体时,通常是让几个会关联的表同时使用同一个二级缓存,这样就能解决脏数据问题,即这几个表通过参照缓存指向同一个 namespace。

虽然这样可以解决脏数据的问题,但是并不是所有的关联查询都可以这么解决,如果有几十个表甚至所有表都以不同的关联关系存在于各自的映射文件中时,使用参照缓存显然没有意义。在无法保证数据不出现脏读的情况下,建议在业务层使用可控制的缓存代替二级缓存。

Last updated