一 緩存命中率
命中率 = 從緩存中讀取的次數(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);
}