mybatis-缓存1
以下转自:http://www.cnblogs.com/weidiao/p/5469046.html
mybatis有两级缓存机制,一级缓存默认开启,可以在手动关闭;二级缓存默认关闭,可以手动开启。一级缓存为线程内缓存,二级缓存为线程间缓存。
一提缓存,必是查询。缓存的作用就是查询快。写操作只能使得缓存失效,不管是一级缓存还是二级缓存,一旦发生写操作,缓存就要清空一次。
缓存是把双刃剑,用得好比较难,用不好就把自己伤着了。
Perpetual这个单词,意为“永恒”。PerpetualCache表示永不过期的缓存。mybatis的两级缓存都是默认为PerpetualCahe,一级缓存的缓冲机制不能更改,二级缓存的缓冲定制性非常强。可以自定义存储源(存储源其实就相当于一个HashMap,把查询跟查询结果一一对应起来)。
一级缓存默认开启,它的实现为PerpetualCache,作用范围为Session,对于同一个Session,如果查询同一个事物查询两次,那么只执行一次数据库操作。它的清空条件有如下三种:
* 写操作
* 手动执行SqlSession#clearCache()
* SqlSession#close()关闭之后缓存当然要清空,所以数据库连接池不会发生Session之间共享一级缓存的情况。
二级缓存默认关闭,需要手动开启。它的作用域为mapper,是多线程之间共享的缓存,是应用级缓存,多个Session可以共用同一个mapper的缓存,每一个mapper维护一份缓存对象,但是可以配置多个mapper共用一份缓存对象,通过cache-ref标签。
二级缓存粒度十分精细:
* 全局总开关<settings>中设置cacheEnabled=true则开启二级缓存
* mapper有cache属性
* 语句的useCache=true
缓存机制使用顺序:二级缓存->一级缓存->数据库
二级缓存的选择:
* mybatis自带的缓存
* 用户自定义
* 第三方内存缓存库集成
二级缓存注意事项:
* 在数据库中一旦使用触发器,缓存里面有可能得不到相应的更新,有可能造成数据库里更新了很多,内存里面缓存浑然不知,所以触发器与缓存悠着点用,除非十分确定二者不会互相干扰。
* 对于同一个表的写操作和读操作必须定义在同一个mapper中(同一个namespace中),假如分开成读mapper和写mapper,那么写操作之后无法清空读mapper,缓存变成脏数据。
* 如果一个数据库表对应一个mapper,对一个表的写操作不能直接执行对其它表的写操作(必须经过其他表的mapper来执行写操作),否则其他表的缓存可能变成脏数据。
* csdn上一位大神说目前mybatis的缓存机制就是垃圾,根本不可用。
mybatis-缓存1的更多相关文章
- mybatis缓存
mybatis缓存http://www.cnblogs.com/QQParadise/articles/5109633.htmlhttp://www.mamicode.com/info-detail- ...
- Mybatis缓存处理机制
一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...
- MyBatis缓存禁用失败
问题:MyBatis缓存无法禁用,同一个session的select查询结果一样,但是数据库其实已改变. 尝试达到想要的目的: 1.msgmapper.xml里的select标签加上 <sele ...
- MyBatis入门学习教程-MyBatis缓存
一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了 package me.gacl.test; 2 import me.gacl.domain.User; import ...
- MyBatis学习总结(七)——Mybatis缓存(转载)
孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的 ...
- MyBatis学习总结(七)——Mybatis缓存
一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...
- MyBatis学习总结(七)——Mybatis缓存
一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...
- MyBatis——Mybatis缓存
原文:http://www.cnblogs.com/xdp-gacl/p/4270403.html MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架 ...
- 【转】MyBatis学习总结(七)——Mybatis缓存
[转]MyBatis学习总结(七)——Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualC ...
- 使用MyBatis缓存
(1).为什么需要使用缓存:: MyBatis是一个持久层(数据库层)映射框架,在所有访问数据库的操作中,无疑数据查询是最耗费数据库资源的操作了,因为你一次可能需要查询成千上百万条记录(如果你不加限制 ...
随机推荐
- [整理]Centos6.5 + hadoop2.6.4环境搭建
搭建Hadoop集群环境(3台机器) 1 准备环境 1.1 安装系统,并配置网络使3台机器互联互通,且SSH可直连(无需密码.保存私钥) 1.1.1 安装系统 安装Centos 6.5系统 安装过程略 ...
- VIM配置与管理
VIM是写代码的神器,个人觉得比sublime更强,详情http://zh.wikipedia.org/wiki/Vim.如果用网游做类比,没有经过打造的VIM,也只能算是一只非常有潜力的0级宠物,经 ...
- Ajax.BeginForm()实现ajax无刷新提交
1. 同时安装 Microsoft jQuery Unobtrusive ajax 和 jQuery Unobtrusive Ajax,如下图 安装完成之后多了如下的js库 2. 引用该js库 lay ...
- Centos7下Etcd集群搭建
一.简介 "A highly-available key value store for shared configuration and service discovery." ...
- HDU 1072 Nightmare
Description Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on ...
- jquery_ui_api中文
http://files.cnblogs.com/files/xjyggd/JQuery_UI_API.rar
- NTP校时设置
一.Windows Server 2008 – Time Server 前言: 国家时间与频率标准实验室 && NTP服务器 也可以忽略1~6 直接跳7 如果已改过机码请使用 1 ...
- 百度之星初赛2A 1001 ALL X(HDU 5690)
All X Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- bzoj 1079 着色方案
题目: 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其 中第i 种颜色的油漆足够涂ci 个木块.所有油漆刚好足够涂满所有木块,即c1+c2+-+ck=n.相邻两个木块涂相同色显得 ...
- 前端之CSS(一)
一.什么是CSS CSS是Cascading Style Sheets,层叠样式表,高大上的说法是用来控制网页数据的表现,可以使网页的表现与数据内容分离.通俗来讲,就是用各种盒子的堆叠实现我们想要的H ...