主要用於配置該類中會用到的一些共用的緩存配置。示例:git
@CacheConfig(cacheNames = "users") public interface UserService {。。。}
配置了該數據訪問對象中返回的內容將存儲於名爲users的緩存對象中,咱們也能夠不使用該註解,直接經過@Cacheable本身配置緩存集的名字來定義。github
應用到讀取數據的方法上,便可緩存的方法,如查找方法,先從緩存中讀取,若是沒有再調用相應方法獲取數據,而後把數據添加到緩存中。spring
該註解主要有下面幾個參數:數組
示例以下:緩存
@Cacheable(value = "user", key = "#id")
User selectUserById(final Integer id);
應用到寫數據的方法上,如新增/修改方法,調用方法時會自動把相應的數據放入緩存,示例以下:springboot
@CachePut(value = "user", key = "#user.id") public User save(User user) { users.add(user); return user; }
此時會以user.id作爲緩存key,返回結果user作爲值,測試過程當中發如今修改對象後只將緩存結果移除但key未移除,致使查詢依然使用了緩存而結果爲空(不知道啥狀況)less
@CachePut的參數與@Cacheable相似函數
應用到移除數據的方法上,如刪除方法,調用方法時會從緩存中移除相應的數據,示例以下:測試
@CacheEvict(value = "user", key = "#id") void delete(final Integer id);
除了同@Cacheable同樣的參數以外,@CacheEvict還有下面兩個參數:spa
組合多個Cache註解使用。示例:
@Caching( put = { @CachePut(value = "user", key = "#user.id"), @CachePut(value = "user", key = "#user.username"), @CachePut(value = "user", key = "#user.age") } }
以上是將id-->user;username--->user;age--->user進行緩存。
若是緩存滿了,從緩存中移除數據的策略,常見的有FIFO, LRU 、LFU
經過@EnableCaching註解自動化配置合適的緩存管理器(CacheManager),Spring Boot根據下面的順序去偵測緩存提供者:
能夠經過配置屬性spring.cache.type來強制指定,即
spring.cache.type = xxx
另外可經過注入cacheManager來調試查看使用哪一種類型,進一步熟悉cache
@Autowired private CacheManager cacheManager;