本篇内容介绍了“mybatis和ehcache怎么实现缓存”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!缓存的概念
java里缓存可以分两种情况,一种是JVM的缓存,这个是JVM与操作系统打交道用的,在使用java语言开发时,一般不用到。一种是java语言缓存,这里的缓存是一种机制,不与任何硬件相关。比如一个static的变量,当第一次访问他时我们到文件里读他的值,以后访问时,直接把这个值返回去,这里省下了IO的时间,提高了效率,这就是一个简单的缓存机制。一级缓存一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的。处理流程:用户发起查询请求,查找某条数据,sqlSession先去缓存中查找,是否有该数据,如果有,读取;如果没有,从数据库中查询,并将查询到的数据放入一级缓存区域,供下次查找使用。但sqlSession执行commit,即增删改操作时会清空缓存。这么做的目的是避免脏读。如果commit不清空缓存,会有以下场景:A查询了某商品库存为10件,并将10件库存的数据存入缓存中,之后被客户买走了10件,数据被delete了,但是下次查询这件商品时,并不从数据库中查询,而是从缓存中查询,就会出现错误。二级缓存二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。UserMapper有一个二级缓存区域(按namespace分),其它mapper也有自己的二级缓存区域(按namespace分)。每一个namespace的mapper都有一个二级缓存区域,两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同的二级缓存区域中。处理流程:这里有一个问题,既然有了一级缓存,那么为什么要提供二级缓存呢?二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存的作用范围更大。还有一个原因,实际开发中,MyBatis通常和Spring进行整合开发。Spring将事务放到Service中管理,对于每一个service中的sqlsession是不同的,这是通过mybatis-spring中的org.mybatis.spring.mapper.MapperScannerConfigurer创建sqlsession自动注入到service中的。 每次查询之后都要进行关闭sqlSession,关闭之后数据被清空。所以spring整合之后,如果没有事务,一级缓存是没有意义的。二级缓存的使用:1,打开总开关在MyBatis的配置文件中加入:
表示开启此mapper的namespace下的二级缓存
type表示指定cache接口的实现类的类型,mybatis默认使用PerpetualCache。
要和ehcache整合,需要配置type为ehcache实现cache接口的类型。2,加入ehcache的配置文件在classpath下配置ehcache.xml3,Maven中ehcache 相关依赖最后,简单比较三个比较流行的缓存工具。ehcache是一个纯Java的进程内缓存框架,hibernate使用其做二级缓存。同时,ehcache可以通过多播的方式实现集群。memcache是一套分布式的高速缓存系统,提供key-value这样简单的数据储存,可充分利用CPU多核,无持久化功能。redis高性能的key-value系统,提供丰富的数据类型,单核CPU有抗并发能力,有持久化和主从复制的功能。“mybatis和ehcache怎么实现缓存”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注开发云网站,小编将为大家输出更多高质量的实用文章!
这篇文章主要介绍“JAVA元注解@interface怎么使用”,在日常操作中,相信很多人在JAVA元注解@interface怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JAVA元注解@interface怎么使用”的疑惑…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。