持久層框架中的重要機制。
一級緩存(本地緩存):
同一個數據庫會話期間查詢到的數據會放在本地緩存中。
默認情況下只會開啟一級緩存(SqlSession級別緩存,也叫本地緩存)
重復調用兩次查詢,只會發送一次sql,拿到的也是同一個實體類對象。
一級緩存是一直開啟的。
一級緩存失效的四種情況:
1.SqlSession不同。
2.SqlSession相同,查詢條件不同。
3.SqlSession相同,進行了增刪改操作(有可能影響數據)。
4.SqlSession相同,手動清除緩存。
二級緩存(全局緩存):基于namespace級別的緩存:一個namespace對應一個二級緩存:
工作機制
1、一個會話,查詢一條數據,這個數據就會被放在當前會話的一級緩存中;
2、如果會話關閉;一級緩存中的數據會被保存到二級緩存中;新的會話查詢信息,就可以參照二級緩存中的內容;
3、sqlSession===Employee==>Employee
Department===>Department
不同namespace查出的數據會放在自己對應的緩存中(map)
效果:數據會從二級緩存中獲取
查出的數據都會被默認先放在一級緩存中。
只有會話提交或者關閉以后,一級緩存中的數據才會轉移到二級緩存中
使用:
1)、開啟全局二級緩存配置:<setting name="cacheEnabled" value="true"/>
2)、去mapper.xml中配置使用二級緩存:
<cache></cache>
3)、我們的POJO需要實現序列化接口
二級緩存中的cache配置
<cache eviction="FIFO" flushInterval="60000" readOnly="false" size="1024"></cache>
eviction:緩存的回收策略:
~~~
? LRU – 最近最少使用的:移除最長時間不被使用的對象。
? FIFO – 先進先出:按對象進入緩存的順序來移除它們。
? SOFT – 軟引用:移除基于垃圾回收器狀態和軟引用規則的對象。
? WEAK – 弱引用:更積極地移除基于垃圾收集器狀態和弱引用規則的對象。
? 默認的是 LRU。
flushInterval:緩存刷新間隔
緩存多長時間清空一次,默認不清空,設置一個毫秒值
readOnly:是否只讀:
true:只讀;mybatis認為所有從緩存中獲取數據的操作都是只讀操作,不會修改數據。
mybatis為了加快獲取速度,直接就會將數據在緩存中的引用交給用戶。不安全,速度快
false:非只讀:mybatis覺得獲取的數據可能會被修改。
mybatis會利用序列化&反序列的技術克隆一份新的數據給你。安全,速度慢
size:緩存存放多少元素;
type="":指定自定義緩存的全類名;
實現Cache接口即可;
~~~
和緩存有關的設置/屬性:
1)、cacheEnabled=true: false:關閉緩存(二級緩存關閉)(一級緩存一直可用的)
2)、每個select標簽都有useCache="true":
false:不使用緩存(一級緩存依然使用,二級緩存不使用)
3)、【每個增刪改標簽的:flushCache="true":(一級二級都會清除)】
增刪改執行完成后就會清楚緩存;
測試:flushCache="true":一級緩存就清空了;二級也會被清除;
查詢標簽:flushCache="false":
如果flushCache=true;每次查詢之后都會清空緩存;緩存是沒有被使用的(一級,二級都會清除);
4)、sqlSession.clearCache();只是清楚當前session的一級緩存;
5)、localCacheScope:本地緩存作用域:(一級緩存SESSION);當前會話的所有數據保存在會話緩存中;STATEMENT:可以禁用一級緩存;
對于mybatis而言緩存僅僅是一個Map集合。PerpetualCache 永久緩存類。
memcache,ehcache (hibernate在使用), redis...
https://blog.csdn.net/luanlouis/article/details/41390801 強烈推薦大神博客。
- spring
- 1.spring第一天
- 1.1 安裝spring插件(spring tool suite)
- 1.2 spring概述
- 1.3 控制反轉&依賴注入
- 1.4 springIOC容器
- 1.5 依賴注入的四種方式
- 1.6 配置bean的細節
- 1.7 bean之間的關系
- 1.8 bean作用域
- 1.9 補充:創建對象的幾種方法
- 1源代碼位置
- 2.spring第二天
- 2.1 使用外部屬性文件
- 2.2 spEL
- 2.3 bean的生命周期
- 2.4 通過工廠方式配置bean
- 2.5 基于注解的方式配置bean
- 2.6 組件裝配
- 2.7 靜態代理
- 2.8 動態代理
- 2.9 Cglib代理
- 2源代碼位置
- 3. spring第三天
- 3.1 springAOP
- 3.1.1 AOP簡介
- 3.1.2 為什么使用AOP
- 3.1.3 AOP關鍵術語
- 3.1.4 AOP圖解
- 3.1.5 springAOP實現步驟
- 3.1.6 SpringAOP實現原理:
- 3.1.7 AOP的好處
- 3.1.8 AOP在實際項目中的主要應用
- 3代碼地址
- 3.1.9 純注解版配置aop的方式
- 3.2 maven環境搭建
- 附IDEA激活碼
- 4. spring第四天
- 4.1 c3p0事務
- 4.2 命令窗口事務
- 4.3 c3p0連接池設置
- 4.4 事務中的一些基本概念
- 4.5 事務的傳播行為
- 4.6 自定義異常
- 4.7 spring整合Junit單元測試
- 4.8 JdbcTemplate(附源代碼)
- 事務源代碼
- 4.9 純注解tx
- 4.10 基于xml配置事務
- 0. jsp頁面修改編碼方式
- 0.1 eclipse配置tomcat
- 0.單例模式-飽漢模式
- 0.單例模式-饑漢模式
- springMVC
- 1. springmvc第一天
- 1.1 springMVC概述
- 1.2 springmvc框架搭建及第一個應用程序
- 1.3 @RequestMapping
- 1.4 RequestMapping修飾類
- 1.5 RequestMapping精準化映射
- 1.6 Ant風格URL
- 1.7 帶有占位符的url映射
- 1.8 REST風格
- 1.9 RequerstParam獲取請求正文
- 2. springmvc第二天
- 2.1 優化
- 2.2 POJO綁定請求參數
- 2.3 RequestHeader獲取請求報頭信息
- 2.4 CookieValue獲取Cookie信息
- 2.5 獲取原生ServletAPI
- 2.6 ModelAndView處理模型數據
- 2.7 Map、Model、ModelMap處理模型數據
- 2.8 @SessionAttributes注解
- 2.9 @ModelAttribute無返回值方法及方法入參
- 2.10 @ModelAttribute修飾有返回值類型的方法
- 代碼地址
- 3. springmvc補充
- 3-1 springmvc工作原理
- 3-2 springmvc form表單提交中文亂碼
- 3-3 數據的格式化
- 3-4 自定義類型轉換器
- 3-5 其他知識點
- 3-6 crud代碼
- 3-7 @DateTimeFormat日期格式化
- 3-8 數據驗證的概念及JSR303驗證
- 3-9 Hibernate-Validator驗證框架
- 3-10 Controller捕獲錯誤消息
- 3-11 errors標簽在頁面中獲取錯誤消息
- 3-12 錯誤消息的定制及國際化
- 3-13 自定義攔截器
- 3-14 Java代碼中獲取國際化信息
- 3-15 超級鏈接設置國際化
- 3-16 AJAX支持之@RequestBody
- mybatis
- 1. mybatis第一天
- 1. 為什么使用mybatis
- 2. 下載地址
- 3. hello
- 4. mybatis三種開發模式
- 5. 全局配屬屬性內容
- 6. DTD設置
- 7. Mapper中的CRUD
- 8. 8.mybatis使用主鍵自增
- 9. #{}中的參數處理
- 10. #{}與${}區別
- 11. 集合數據的查詢
- 12 動態sql
- 12.1 if
- 12.2 choose, when, otherwise
- 12.3 trim, where, set
- 12.4 foreach
- 代碼位置
- 2. mybatis第二天
- 1.封裝map類型的數據
- 2. resultMap自定義封裝規則
- 0代碼位置
- 3. mybatis緩存機制
- ssm整合
- 1.maven
- 2.ssm基礎環境搭建
- 2-1 引入項目依賴的jar包
- 2-2 引入bootstrap,jquery
- 2-3 創建項目包結構
- 2-4 編寫web.xml配置文件
- 2-5 編寫sping,springmvc,mybatis配置文件
- 2-6 逆向工程mbg.xml
- shiro安全框架
- 1.shiro簡介
- 易購Buy商城
- 第一天
- 1.課程計劃
- 2.電商行業背景
- 3.易購Buy介紹
- 4.易購Buy架構
- 5.工程搭建
- 6.工程啟動和測試
- 7.ssm框架整合
- 8.整合測試
- 9.svn
- 9.1 svn服務端
- 9.2 svn客戶端
- 第二天
- 1.SOA架構分析
- 2.dubbo使用方法
- 3.注冊中心
- 4.工程改造
- 5.easyUI
- maven
- 1.maven介紹
- 2.idea配置maven和服務器
- 3.創建web工程
- 4.分模塊構建工程
- 5. 代碼位置
- 6. nexus
- Luence搜索
- 1.了解搜索技術
- 2.Lucene的基本使用
- solr
- SolrCloud