springbootii-cache 基於註解的聲明式緩存
阿新 • • 發佈:2018-12-12
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 基於註解的聲明式緩存