当前位置: 首页 > news >正文

湖北省住房和城乡建设厅网站wordpress首页多图片

湖北省住房和城乡建设厅网站,wordpress首页多图片,学校网站建设申请,在郑州网站建设目录 1. MyBatis 的缓存机制 2. 为什么不默认开启 MyBatis 的二级缓存 3. MyBatis 如何开启二级缓存 4. MyBatis 有哪些缓存清除策略 1. MyBatis 的缓存机制 MyBayis 中包含两级缓存#xff1a;一级缓存和二级缓存 1. 一级缓存是 SqlSession 级别的#xff0c;是 MyBati…目录 1. MyBatis 的缓存机制 2. 为什么不默认开启 MyBatis 的二级缓存 3. MyBatis 如何开启二级缓存 4. MyBatis 有哪些缓存清除策略 1. MyBatis 的缓存机制 MyBayis 中包含两级缓存一级缓存和二级缓存 1. 一级缓存是 SqlSession 级别的是 MyBatis 自带的缓存功能默认是开启的并且无法关闭所以当有两个 SqlSession 执行相同的 SQL 时就没有用到一级缓存而是查询了两次数据库。 2. 二级缓存是 Mapper 级别的只要是同一个 Mapper无论使用多少个 SqlSession 进行操作数据都是共享的所以多个 SqlSession 可以共享二级缓存。但是 MyBatis 的二级缓存默认是关闭的需要时可以手动开启。此外二级缓存还可以使用第三方的缓存例如Ehcache。 2. 为什么不默认开启 MyBatis 的二级缓存 为什么不默认开启二级缓存呢 缓存不是可以加速程序的查询性能吗 MyBatis 不默认开启二级缓存的原因有以下几点 1. 缓存粒度过大因为二级缓存是一个全局缓存可以缓存多个不同的查询结果集。默认情况下MyBatis 是不知道哪些查询结果需要缓存哪些查询结果不需要缓存。当开启二级缓存后所有的查询结果都尝试使用缓存这就可能会导致缓存的数据不准确或者不一致性。 例如上图三次查询操作查询到的结果可能不一致此时 MyBatis 默认不知道缓存哪个查询结果这样就存在缓存不准确的风险。 2. 并发性问题在多线程情况下开启二级缓存如果没有及时清空或刷新缓存就可能会导致缓存和数据库数据不一致性问题。 此处的并发性问题可以类比到 Redis 和 MySQL 数据不一致性问题 关于多线程情况下的缓存和数据库不一致性问题以及解决方案可以看我的这篇博客https://blog.csdn.net/xaiobit_hl/article/details/132453064 3. 内存占用问题开启二级缓存之后缓存的数据需要占用大量的内存空间如果没有合适的策略来管理缓存可能就会导致内存占用过多的问题。 4. 复杂性问题二级缓存的配置需要考虑诸多因素例如缓存的刷新以及缓存的清理这都需要较好的缓存策略来处理这就加大了开发的复杂性并且有可能引入新的问题。 基于以上问题MyBatis 选择默认关闭二级缓存当开发人员确认某些查询可以受益于缓存时再手动开启二级缓存来使用即可把主动权交给了开发人员。 3. MyBatis 如何开启二级缓存 MyBatis 中开启二级缓存需要两步操作 在 mapper 对应的 xml 中添加 cache 标签在 xml 中给需要缓存的标签设置 useCachetrue。 ?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.example.demo.mapper.UserMappercache/select idgetAll resultTypeUserInfo useCachetrueselect count(*) from userinfo;/select /mapper 进行单元测试 SpringBootTest class UserMapperTest {Resourceprivate UserMapper userMapper;Testvoid getAll() {int ret1 userMapper.getAll();System.out.println(查询结果 ret1);int ret2 userMapper.getAll();System.out.println(查询结果 ret2);} } 【说明】 此处在外部方法调用两次 getAll()  方法它一定会使用两个 SqlSession只有在一个 getAll() 方法里面执行两条相同的 SQL 时才会使用同一个 SqlSession。 如何判断是否走缓存properties 文件中配置执行打印 SQL 如果两次查询都打印了 SQL 语句说明没有走缓存如果第一次查询打印了 SQL 语句第二次没有打印说明第二次查询走的是缓存。 【执行结果】 【结果分析】 执行结果很显然第二次查询走了缓存。虽然调用了两次 getAll() 方法使用了两个 SqlSession但是因为我前面开启了二级缓存二级缓存的作用域是整个 mapper所以不管是用了几个 SqlSession第二次查询肯定会走缓存。 如果关闭二级缓存那么两次查询都会查询数据库创建了两个 SqlSession都打印了 SQL执行结果如下 【一级缓存示例】 在关闭二级缓存的情况下还想使得第二次查询走缓存可以通过在方法上加一个 Transactional 注解就可以做到。 当我们在方法上加上 Transactional 注解的时候事物里面的所有方法就会使用一个 SqlSession 来进行操作那么第二次查询也就自然而然会走缓存了。 但是这种做法是不推荐的使用 Transactional 注解相当于用了新方法解决旧问题然后又引入了新的问题。Transactional 底层是基于动态代理来实现的操作代理对象肯定不如操作原对象的性能好所以又引入了性能问题。 4. MyBatis 有哪些缓存清除策略 关于 MyBatis 二级缓存的一个补充 使用二级缓存时所有的 select 语句的结果将会被缓存所有的 updateinsertdelete 语句将会刷新缓存缓存默认使用 LRU 最近最少使用算法来清除不需要的缓存 -- eviction缓存不会定时刷新没有刷新间隔 -- flushInterval缓存默认最多保存 1024 个引用 -- size缓存默认被视为读写缓存prototype对象不共享更安全。 -- readOnly 上述这些特性都可以在 cache/ 标签里进行设置 cache evictionFIFO flushInterval60000 size512 readOnlytrue/ 这行设置的意思是缓存使用 FIFO 的清除策略刷新间隔为 60s缓存能保存的最大引用数为 512并且设置只读缓存单例。 MyBatis 缓存的清除策略有 4 种可以设置 LRU最近最少使用FIFO先进先出按照对象的缓存顺序来清除缓存SOFT软引用普通 GC 不回收触发 Full GC 才回收。WEAK弱引用触发任何 GC 都会回收例如Young GCFull GC。 对于 LRU 不太理解的可以看我的这篇博客https://blog.csdn.net/xaiobit_hl/article/details/132418631  虽然 MyBatis 的缓存看起来非常牛皮但是它只能在单机架构中花拳绣腿分布式架构还得看 Redis。
http://www.pierceye.com/news/342288/

相关文章:

  • 建设网站的一般步骤网站设计下载
  • 广东同江医院网站建设建站网站图片不显示
  • 免费在线响应式网站自助建站网站网页怎么设计
  • 池州网站建设抚顺网站建设公司
  • 网站如可引导客户义乌小程序开发制作公司
  • 环境设计排版素材网站周口市住房和城乡建设局网站
  • 建设部资质查询网站wordpress采集英文
  • 深圳北站设计方案高质量网站外链平台
  • 苏州做网站优化的公司国外 网站页面
  • 网站建设流程发布网站和网页制作鲜花网站建设论文百度文库
  • 建个人网站赚钱吗手机网站页面大小
  • php简单购物网站源码海口网红美食餐厅
  • 傻瓜式建站软件长沙做软件的公司
  • 旅行社营业网点可以做网站吗别人网站建设多少钱
  • 南宁设计网站建设教程网站建设
  • 柯城区住房和城乡建设局网站wordpress仿fe素材
  • 黄岛建设局网站用什么建设网站
  • 桂林dj网站郑州上海做网站的公司
  • 进入江苏省住房和城乡建设厅网站网络舆情监测 toom
  • 延安市建设工程交易中心网站seo网络营销推广优化
  • 网站一条龙服务教育类网站前置审批
  • 安徽省建设厅网站首页wordpress和typecho
  • 网站开发考试题torrentkitty磁力猫引擎
  • 如何把电脑改成服务器 做网站微信网站背景图片
  • 淘宝客网站建设详细教程链接交换平台
  • 外贸门户网站深圳网站制作开发排名
  • 如何建设一个稳定的网站photoshop网页制作视频教程
  • 企业网站建设合作合同28招商加盟网
  • 国外设计灵感网站WordPress数据库添加管理员
  • 山东省建设备案网站审批表免费设计手写签名