1. 程式人生 > >spring 一級和二級快取

spring 一級和二級快取

最近面試總是被問到spring的一些問題,包括spring的一級和二級快取的問題,那麼究竟什麼事一級快取,什麼是二級快取呢。

一級快取

盜用一下別人的圖,自己是在是懶得畫圖了:
這裡寫圖片描述
一級快取就是停留在sqlsession級別的,它是用一個hashmap來儲存的。也就是你使用比如:

 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="com.test.mapper.bo.CpPricemakingFactorKey" >
    select 
    <include refid="Base_Column_List"
/> from cp_pricemaking_factor where TENANT_ID = #{tenantId,jdbcType=VARCHAR} and PRICE_PRODUCT_TYPE = #{priceProductType,jdbcType=VARCHAR} and FACTOR_NAME = #{factorName,jdbcType=VARCHAR} and PRICE_PRODUCT_ID = #{priceProductId,jdbcType=VARCHAR} </select>

那麼當我們使用同一個select的時候,他們會先從hashmap裡找資料,如果沒有再從資料庫裡查,但是一旦出現更新操作或者這個service方法技術,那麼該sqlsession將會關閉,快取也將會消失。

二級快取

二級快取在spring是預設關閉的,我們需要在配置檔案裡開啟。他是mapper級別的,也就是說同一個result的多個sqlsession都可以共用這一個hashmap做的快取。
再次盜用:
這裡寫圖片描述