Mybatis
1.mybatis的缓存机制?
Mybatis有一级缓存和二级缓存。
-
一级缓存又称为会话(Session)缓存,默认开启无法关闭。
一级缓存的只在同一SQLSession中生效,也就是说在同一个SQLSession中,第一次执行完sql语句会把结果写到缓存中,后续执行同样的sql时会直接从缓存中获取,从而提高查询效率。 -
二级缓存又称为名称空间(namespace)缓存,作用于某个namespace,可以理解为是接口(Mapper),需要手动配置开启。
二级缓存可以被多个SQLSession共享,不同的SQLSession只要执行相同 namespace 下的 sql 语句,第一次执行的结果就会写到缓存,第二次会从缓存中获取数据。
2.为什么用Redis缓存不直接用mybatis的缓存?
因为对数据库的更新操作都会刷新缓存,mybatis的缓存可能会导致读到脏数据,也就是说在更新数据库时,可能导致数据库和缓存数据不一致。
而Redis可以通过延迟双删或者基于canal来实现与数据库的数据一致性。而且Redis还有其他优势,比如:...。