摘要:一級(jí)緩存和二級(jí)緩存緩存將語句查詢出來對(duì)應(yīng)的對(duì)象進(jìn)行緩存,供后續(xù)對(duì)象使用。所以說,一級(jí)緩存是基于的。為了解決相互共享問題,提供二級(jí)緩存解決該問題。注意,一級(jí)緩存對(duì)每個(gè)對(duì)象要求他們在所有語句后必須執(zhí)行語句,否則,不存在一級(jí)緩存。
Mybatis緩存
因?yàn)闊釔?,所以拼搏? --RuiDer
前導(dǎo)必備- 數(shù)據(jù)庫 - MybatisMybatis緩存
Mybatis提供緩存支持,志在提升開發(fā)的性能。數(shù)據(jù)庫數(shù)據(jù)的索引一般是基于磁盤的,而內(nèi)存和高速緩存相對(duì)磁盤的讀寫速度相當(dāng)快,基本是磁盤讀寫數(shù)據(jù)的十倍。尤其在互聯(lián)網(wǎng)開發(fā)中,追求速度,緩存為性能提供捷徑。Mybatis緩存包括一級(jí)緩存和二級(jí)緩存,一級(jí)緩存基于SqlSession層面,二級(jí)緩存基于SqlSessionFactory層面。一級(jí)緩存和二級(jí)緩存
緩存:將sql語句select查詢出來對(duì)應(yīng)的POJO對(duì)象進(jìn)行緩存,供后續(xù)SqlSession對(duì)象使用。 一級(jí)緩存 條件: - 同一個(gè)SqlSession對(duì)象 - 同一個(gè)sql查詢語句 當(dāng)同一個(gè)SqlSession對(duì)象進(jìn)行兩次相同select語句查詢時(shí),第一次會(huì)執(zhí)行sql語句進(jìn)行數(shù)據(jù)庫的索引, 之后將所查詢數(shù)據(jù)對(duì)應(yīng)的POJO對(duì)象進(jìn)行緩存;第二次執(zhí)行相同參數(shù)的sql語句查詢前,不會(huì)像第一次執(zhí)行sql語句, 而是直接從緩存中索引數(shù)據(jù)對(duì)象。所以說,一級(jí)緩存是基于SqlSession的。不同的SqlSession對(duì)象的緩存不可以 共享,不能相互訪問。為了解決相互共享問題,Mybatis提供二級(jí)緩存解決該問題。注意,一級(jí)緩存對(duì)每個(gè)SqlSession 對(duì)象要求他們在所有sql語句后必須執(zhí)行commit語句,否則,不存在一級(jí)緩存。 二級(jí)緩存 條件: - 同一個(gè)SqlSessionFactory對(duì)象 - 不同的SqlSession對(duì)象 - 共享POJO對(duì)象、 二級(jí)緩存是相對(duì)SqlSessionFactory對(duì)象而言的,同一個(gè)SqlSessionFactory創(chuàng)建的不同的SqlSession對(duì)象, 可以共享該SqlSessionFactory下的所有POJO對(duì)象,也就是數(shù)據(jù)庫數(shù)據(jù)的共享。但是二級(jí)緩存要求對(duì)應(yīng)的POJO類需要實(shí)現(xiàn) 序列化,也就是實(shí)現(xiàn)java.io.Serializable接口。一級(jí)緩存 和 二級(jí)緩存 的配置
一級(jí)緩存:Mybatis默認(rèn)一級(jí)緩存,只要每個(gè)SqlSession對(duì)象執(zhí)行commit語句,都會(huì)存在一級(jí)緩存。 二級(jí)緩存:二級(jí)緩存配置cache元素配置項(xiàng)加入上述語句,就會(huì)開啟二級(jí)緩存。二級(jí)緩存會(huì)進(jìn)行序列化和反序列化的過程,所以說POJO 必須要實(shí)現(xiàn)Seriaizable接口。二級(jí)緩存cache元素會(huì)將select出來的POJO對(duì)象進(jìn)行緩存,對(duì)于 insert,update,delete sql語句二級(jí)緩存會(huì)自動(dòng)刷新。
//cache接口源碼 public interface Cache{ //獲取緩存id public int getId(); //保存POJO對(duì)象,key為鍵,value為值 public void putObject(Object key,Object value); //獲取POJO對(duì)象 public Object getObject(Object key); //清除緩存 void clear(); //獲取緩存大小 public int getSize(); //獲取讀寫鎖,主要是多線程時(shí)使用 ReadWriteLock getReadWriteLock(); }配置Redis或者M(jìn)ongoDB緩存處理
我的GitHub
我的博客
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://hztianpu.com/yun/71405.html
摘要:一級(jí)緩存值得注意的地方默認(rèn)就是支持一級(jí)緩存的,并不需要我們配置和整合后進(jìn)行代理開發(fā),不支持一級(jí)緩存,和整合,按照的模板去生成代理對(duì)象,模板中在最后統(tǒng)一關(guān)閉??偨Y(jié)的一級(jí)緩存是級(jí)別的。 前言 本文主要講解Mybatis的以下知識(shí)點(diǎn): Mybatis緩存 一級(jí)緩存 二級(jí)緩存 與Ehcache整合 Mapper代理 使用Mapper代理就不用寫實(shí)現(xiàn)類了 逆向工程 自動(dòng)生成代碼 ...
摘要:得到用戶信息,將用戶信息存儲(chǔ)到一級(jí)緩存中。如果中間去執(zhí)行操作執(zhí)行插入更新刪除,則會(huì)清空中的一級(jí)緩存,這樣做的目的為了讓緩存中存儲(chǔ)的是最新的信息,避免臟讀。 基礎(chǔ): 1、 概念:Java當(dāng)中的一個(gè)持久層框架。2、 特點(diǎn)、優(yōu)勢:(1)把java代碼和SQL代碼做了一個(gè)完全分離。(2)良好支持復(fù)雜對(duì)象的映射(輸入映射、輸出映射)(3)使用動(dòng)態(tài)SQL,可以預(yù)防SQL注入。3、 ...
摘要:緩存介紹正如大多數(shù)持久層框架一樣,同樣提供了一級(jí)緩存和二級(jí)緩存的支持一級(jí)緩存基于的本地緩存,其存儲(chǔ)作用域?yàn)?,?dāng)或之后,該中的所有就將清空。一級(jí)緩存實(shí)現(xiàn)對(duì)的操作內(nèi)部都是通過來執(zhí)行的。 MyBatis緩存介紹 正如大多數(shù)持久層框架一樣,MyBatis 同樣提供了一級(jí)緩存和二級(jí)緩存的支持 一級(jí)緩存: 基于PerpetualCache 的 HashMap本地緩存,其存儲(chǔ)作用域?yàn)?Se...
摘要:本文章的源碼再文章末尾什么是查詢緩存有一級(jí)緩存和二級(jí)緩存。默認(rèn)開啟一級(jí)緩存。證明了一級(jí)緩存只是在數(shù)據(jù)庫會(huì)話內(nèi)部共享的。但是,整合到中后,一級(jí)緩存就會(huì)被關(guān)閉。根據(jù)時(shí)間表比如沒有刷新間隔緩存不會(huì)以任何時(shí)間順序來刷新。 倉庫地址:spring-boot-learning歡迎star、fork,給作者一些鼓勵(lì) 學(xué)習(xí)SpringBoot集成Mybatis的第二章,了解到Mybatis自帶的緩存機(jī)...
摘要:本文章的源碼再文章末尾什么是查詢緩存有一級(jí)緩存和二級(jí)緩存。默認(rèn)開啟一級(jí)緩存。證明了一級(jí)緩存只是在數(shù)據(jù)庫會(huì)話內(nèi)部共享的。但是,整合到中后,一級(jí)緩存就會(huì)被關(guān)閉。根據(jù)時(shí)間表比如沒有刷新間隔緩存不會(huì)以任何時(shí)間順序來刷新。 倉庫地址:spring-boot-learning歡迎star、fork,給作者一些鼓勵(lì) 學(xué)習(xí)SpringBoot集成Mybatis的第二章,了解到Mybatis自帶的緩存機(jī)...
閱讀 973·2021-11-22 09:34
閱讀 1154·2021-10-08 10:16
閱讀 1924·2021-07-25 21:42
閱讀 1872·2019-08-30 15:53
閱讀 3596·2019-08-30 13:08
閱讀 2278·2019-08-29 17:30
閱讀 3431·2019-08-29 17:22
閱讀 2285·2019-08-29 15:35