Spring4 緩存

一 緩存命中率

命中率 = 從緩存中讀取的次數(shù) / (總讀取次數(shù)[從緩存中讀取的次數(shù) + 從慢速設(shè)備上讀取的次數(shù)])
Miss率 = 沒有從緩存中讀取的次數(shù) / (總讀取次數(shù)[從緩存中讀取的次數(shù) + 從慢速設(shè)備上讀取的次數(shù)])

二 過期策略

  • FIFO(First In First Out) 先進(jìn)先出策略,即先放入緩存的數(shù)據(jù)先被移除
  • LRU (Least Recently Used)最久未使用策略,即使用時間距離現(xiàn)在最久的那個被移除
  • LFU(Least Frequently Used)最近最少使用策略,即一定時間段內(nèi)使用次數(shù)最少的那個被移除
  • TTL (Time To Live) 存活期 ,即從緩存中創(chuàng)建時間點開始直至到期的一個時間段
  • TTI (Time To Idle)空閑期 即一個數(shù)據(jù)多久沒被訪問就從緩存中移除

三 Spring4 緩存注解

使用Spring 緩存注解時一定要通過:<cache:annotation-driven/> 開啟基于注解的緩存驅(qū)動

@Cacheable

參數(shù) 說明 示例
value/cacheNames 緩存的名稱,必須指定最少一個 @Cacheable(cacheNames="user")
key 緩存的Key 可以為空,如果指定則按Spel 表達(dá)式編寫。如果不指定,則默認(rèn)按照方法的所有參數(shù)進(jìn)行組合 @Cacheable(cacheNames="user",key="#id")
condition 緩存的條件,可以為空,使用Spel表達(dá)式編寫,返回True或者False 只有返回True才進(jìn)行緩存 @Cacheable(cacheNames="user",condition="#userName.length() > 2")

@CachePut

參數(shù) 說明 示例
value/cacheNames 緩存的名稱,必須指定最少一個 @CachePut(cacheNames="user")
key 緩存的Key 可以為空,如果指定則按Spel 表達(dá)式編寫。如果不指定,則默認(rèn)按照方法的所有參數(shù)進(jìn)行組合 @CachePut(cacheNames="user",key="#id")
condition 緩存的條件,可以為空,使用Spel表達(dá)式編寫,返回True或者False 只有返回True才進(jìn)行緩存 @CachePut(cacheNames="user",condition="#userName.length() > 2")

@CacheEvict
@CacheEvict 注解是@Cacheable 的反向操作 負(fù)責(zé)從給定的緩存中移除值

參數(shù) 說明 示例
value/cacheNames 緩存的名稱,必須指定最少一個 @CacheEvict (cacheNames="user")
key 緩存的Key 可以為空,如果指定則按Spel 表達(dá)式編寫。如果不指定,則默認(rèn)按照方法的所有參數(shù)進(jìn)行組合 @CacheEvict(cacheNames="user",key="#id")
condition 緩存的條件,可以為空,使用Spel表達(dá)式編寫,返回True或者False 只有返回True 才會清空緩存。unless屬性與condition屬性相反,滿足條件不進(jìn)進(jìn)行緩存 @CachePut(cacheNames="user",condition="#userName.length() > 2")
allEntries 是否清空所有的緩存內(nèi)容,默認(rèn)為false 如果指定為True 則方法調(diào)用后會立即清除所有緩存 @CacheEvict(cacheNames="user",allEntries=true)
beforeInvocation 是否在執(zhí)行方法前就清空,默認(rèn)為false 如果指定為true 則在方法沒有執(zhí)行的時候就清空緩存。在默認(rèn)情況下,如果方法執(zhí)行拋出異常,則不會清除緩存 @CacheEvict(cacheNames="user",beforeInvocation=true)

@CacheConfig
類級別的全局緩存注解

例如:@CacheConfig(cacheNames="users",keyGenerator="myKeyGenerator")

四 自定義緩存注解

Spring 提供了自定注解 可以把這些注解組合到一個注解中

@Caching(
        put = {
            @CachePut(cacheNames="users",key="#user.id"),   
            @CachePut(cacheNames="users",key="#user.userName"), 
            @CachePut(cacheNames="users",key="#user.email") 
        }
)
public @interface UserServiceCache {

}
@UserServiceCache
    public SysUser getSysUserById(String id) {
        return sysUserDao.getSysUserById(id);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,217評論 0 4
  • 在服務(wù)器端程序開發(fā)領(lǐng)域,性能問題一直是備受關(guān)注的重點。業(yè)界有大量的框架、組件、類庫都是以性能為賣點而廣為人知。然而...
    零一間閱讀 944評論 0 12
  • 緩存是讓數(shù)據(jù)更接近于使用者;工作機制是先從緩存中讀取數(shù)據(jù),如果沒有再從慢速設(shè)備上讀取實際數(shù)據(jù)(數(shù)據(jù)也會存入緩存);...
    空之古城閱讀 1,405評論 0 8
  • 朱華五月下江南,姑蘇城里笙簫伴。 即興吟唱詩一首,疑是唐宋古詩傳。
    老槐樹閱讀 256評論 0 4
  • @王紅娟 霧靄蒙蒙,先生一路東去, 兩旁樹影疊疊,向后奔去, 汽笛陣陣,車隨人動, 滿臉愁容,頭腦暈脹, 洪昌先生...
    宏昌居士123閱讀 265評論 0 1

友情鏈接更多精彩內(nèi)容