2.1-缓存机制+SqlSession事务操作:缓存机制:一二级缓存
一、一级缓存SqlSession 级缓存开启状态默认自动开启无需任何额外配置也不能通过配置关闭只能通过操作让其失效作用域作用域为SqlSession级别缓存数据仅在当前SqlSession内有效不同SqlSession之间完全隔离核心特性缓存命中条件同一SqlSession内执行SQL 语句 参数完全相同的查询第二次及以后会直接读取缓存不访问数据库缓存自动清空场景执行insert/update/delete写操作、SqlSession.commit()或SqlSession.rollback()时一级缓存会被自动清空保证缓存与数据库数据一致性手动清空方式调用SqlSession.clearCache()方法可手动清空当前SqlSession的一级缓存序列化要求无一级缓存存储在内存中仅在SqlSession生命周期内有效无需实体类实现Serializable接口二、二级缓存Mapper 级缓存开启状态默认关闭需满足三个必要条件才能生效全局配置settings中cacheEnabledtrue默认值为true若设为false会全局禁用二级缓存Mapper 配置在对应Mapper.xml中添加cache/标签或使用注解CacheNamespace实体类要求对应的实体类必须实现Serializable接口否则缓存数据无法序列化存储作用域作用域为Mapper级别按namespace隔离不同namespace的 Mapper 缓存数据相互独立同一namespace的多个SqlSession可以共享二级缓存数据核心特性数据写入时机二级缓存数据不会即时写入需等SqlSession关闭后一级缓存中的数据才会同步到二级缓存缓存清空规则执行insert/update/delete写操作时当前namespace的二级缓存会被自动清空共享范围限制仅同一namespace的SqlSession可共享跨namespace无法共享三、 缓存读写流程查询读取顺序关键易错点优先级二级缓存 → 一级缓存 → 数据库流程查询时先从当前namespace的二级缓存获取未命中则从当前SqlSession的一级缓存获取仍未命中则查询数据库查询结果会先写入一级缓存SqlSession关闭后同步到二级缓存数据写入顺序数据库查询结果 → 一级缓存即时写入 → 二级缓存SqlSession关闭后写入四、缓存配置二级缓存全局配置在 MyBatis 全局配置文件中通过settings标签配置cacheEnabledsettings setting namecacheEnabled valuetrue/ /settingsname属性值为cacheEnabledvalue为true表示开启全局二级缓存支持默认true二级缓存 Mapper 配置在Mapper.xml中添加cache/标签可配置缓存淘汰策略eviction、刷新间隔flushInterval等属性五、缓存设计原则与指标缓存命中率衡量缓存有效性的核心指标命中率越高说明更多请求从缓存获取数据系统性能越好缓存的优缺点优点降低数据库负载、提高系统响应速度、减少网络 IO 开销缺点增加数据一致性风险需通过缓存清空、过期时间等策略保证缓存与数据库一致数据一致性保障写操作insert/update/delete会触发对应缓存的清空避免脏数据读取六、一级缓存 vs 二级缓存 核心对比表对比维度一级缓存二级缓存默认状态自动开启默认关闭作用域SqlSession 级别Mapper (namespace) 级别序列化要求无实体类需实现 Serializable共享范围仅当前 SqlSession同一 namespace 的多 SqlSession写入时机查询后即时写入SqlSession 关闭后写入清空触发条件写操作、commit/rollback写操作
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2409992.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!