1. 程式人生 > >springbootii-cache 基於註解的聲明式緩存

springbootii-cache 基於註解的聲明式緩存

creat 獲取 inf 參數 設置 font user void 技術

測試版本springboo2.0.4

1、使用緩存註解

通用屬性解釋:

value屬性:要使用緩存的名稱

key屬性:使用SpEL表達式自定義緩存Key,

例如:#name—以參數name作為自定義緩存Key,

#result.name—以返回值結果的name屬性作為自定義緩存Key

(1)@Cacheable註解

如果沒有緩存則會執行方法並將返回值緩存,如果有緩存時,不會執行方法而是直接返回緩存中的值

 /**
     * cacheNames 設置緩存的值
     * key:指定緩存的key,這是指參數id值。key可以使用spEl表達式
     */
    @Cacheable(value 
= "userCache", key = "#id", unless="#result == null") public User getById(int id) { logger.info("獲取用戶start..."); return userMapper.selectById(id); }

技術分享圖片

@Cacheable(value = "allUsersCache", unless = "#result.size() == 0")
    public List<User> getAllUsers() {
        logger.info(
"獲取所有用戶列表"); return userMapper.selectList(null); }

當返回的結果size == 0時 不緩存

(2)@CachePut註解

不管有沒有緩存都會執行方法並將結果緩存起來

(3)@CacheEvict註解

移除指定緩存

/**
     * 創建用戶,同時使用新的返回值的替換緩存中的值
     * 創建用戶後會將allUsersCache緩存全部清空
     */
    @Caching(
            put = {@CachePut(value = "userCache", key = "#user.id")},
            evict 
= {@CacheEvict(value = "allUsersCache", allEntries = true)} ) public User createUser(User user) { logger.info("創建用戶start..., user.id=" + user.getId()); userMapper.insert(user); return user; }

創建一個新用戶會緩存,然後清空掉所有用戶的緩存

註意:

a.User對象需要實現序列化接口

b.只有@CacheEvict註解的方法返回值可以為void

參考項目

技術分享圖片

參考:

https://my.oschina.net/u/3773384/blog/1795296

springbootii-cache 基於註解的聲明式緩存