mybatis+spring环境下缓存的使用和mybatis一级缓存失效原因
来源:互联网 发布:linux常用命令大全 编辑:程序博客网 时间:2024/06/03 07:52
这些天由于项目存在数据访问的性能问题,研究了下缓存在各个阶段的应用,一般来说,可以在5个方面进行缓存的设计:
1.最底层可以配置的是MySQL自带的query cache,
2.mybatis的一级缓存,默认情况下都处于开启状态,只能使用自带的PerpetualCache,无法配置第三方缓存
3.mybatis的二级缓存,可以配置开关状态,默认使用自带的PerpetualCache,但功能比较弱,能够配置第三方缓存,
4.service层的缓存配置,结合spring,可以灵活进行选择
5.针对实际业务情况,直接缓存部分html页面,直接返回给客户端。
在测试过程中,发现mybatis的一级缓存没有起作用,失效了。经过调研,发现是由于以下原因引起的:
1.mybatis的一级缓存生效的范围是sqlsession,是为了在sqlsession没有关闭时,业务需要重复查询相同数据使用的。一旦sqlsession关闭,则由这个sqlsession缓存的数据将会被清空。
2.spring对mybatis的sqlsession的使用是由template控制的,sqlsession又被spring当作resource放在当前线程的上下文里(threadlocal),spring通过mybatis调用数据库的过程如下:
a,我们需要访问数据
b,spring检查到了这种需求,于是去申请一个mybatis的sqlsession(资源池),并将申请到的sqlsession与当前线程绑定,放入threadlocal里面
c,template从threadlocal获取到sqlsession,去执行查询
d,查询结束,清空threadlocal中与当前线程绑定的sqlsession,释放资源
e,我们又需要访问数据
f,返回到步骤b
通过以上步骤后发现,同一线程里面两次查询同一数据所使用的sqlsession是不相同的,所以,给人的印象就是结合spring后,mybatis的一级缓存失效了。
- mybatis+spring环境下缓存的使用和mybatis一级缓存失效原因
- mybatis+spring环境下缓存的使用和mybatis一级缓存失效原因
- Spring配置Mybatis后,一级缓存失效的原因
- mybatis的一级缓存
- mybatis的一级缓存
- MyBatis的一级缓存
- Mybatis的一级缓存和二级缓存-2
- MyBatis的一级缓存和二级缓存
- Mybatis的一级缓存和二级缓存机制
- Mybatis的一级缓存和二级缓存
- Mybatis的一级缓存和二级缓存
- Mybatis的一级缓存和二级缓存
- mybatis 的一级缓存和二级缓存
- mybatis一级缓存和二级缓存
- Mybatis 一级缓存和二级缓存
- MyBatis一级缓存和二级缓存
- mybatis 一级缓存和二级缓存
- Mybatis一级缓存和二级缓存
- table中的table-layout属性
- Android本地定时通知
- Can't get hostname for your address找不到主机名
- dup和dup2的使用方法
- log4j 产生的日志位置设置catalina.home、catalina.base
- mybatis+spring环境下缓存的使用和mybatis一级缓存失效原因
- android 实现控件左右或上下抖动
- Java开发中的Memcache原理及实现
- java基础篇之判断和循环
- Sql server索引优化
- sql语句查询经纬度范围
- 顺时针打印矩阵
- SQL中往表中插入数据的几种不同形式的小结
- 自动化测试-知乎关注功能用例