Spring快取註解@Cacheable,@CachePut , @CacheEvict使用
阿新 • • 發佈:2018-12-20
設定過期時間沒有效果,需要重新測試一遍,
測試過的資料都 寫在註釋裡了,
@Autowired VersionDao versionDao; private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override //@CachePut(value="VersionModel",key="#mv.getApplicationId()")//僅僅清空KEY = mv.getApplicationId()的快取,其實這種對於獲取臺賬資料是錯誤 @CacheEvict(value="VersionModel",allEntries=true) public int saveVersion(VersionModel mv) { // TODO Auto-generated method stub logger.info("清空VersionModel快取, method=saveVersion"); return versionDao.saveVersion(mv); } // sync 非同步執行必須是隻有一個快取標記 不能這樣value={"VersionModel","versiontest"}一起使用 @Override //@Cacheable(value={"VersionModel","versiontest"},key="\"applicationList\"",sync =true) //多個快取標記用陣列方式組合,刪除任意一個快取標記都會更新快取,達到不同表的更新都能反映到快取上 @Cacheable(value="VersionModel#${select.cache.timeout:1800}",key="\"applicationList\"",sync = true) //timeout時間秒: 設定快取過期時間.非同步執行防止快取失效後同一時間大量請求落到資料庫 //快取失效,第一種方式 @Cacheable(value = "VersionModel#${select.cache.timeout:1000}#${select.cache.refresh:600", key = "")//example 是cache容器名字 #後邊的是SpEL表示式 //快取失效,第二種方式 @Cacheable(value = {"VersionModel#5#2"},key ="#id") 在快取即將過期時主動重新整理快取,快取失效前2秒內命中,主動重新整理快取,重置失效時間 public List<VersionModel> versionList(HashMap<String, Object> map) { // TODO Auto-generated method stub logger.info("輸出的都是沒有走快取"); List<VersionModel> vmlist = versionDao.versionList(map); return vmlist; } @Override @Cacheable(value="VersionModel",key="#str") public VersionModel getVersion(String str) { // TODO Auto-generated method stub logger.info("從VersionModel拿出快取 key=#applicationId,method=getVersion"); return versionDao.getVersion(str); } @Override @CacheEvict(value="versiontest",allEntries=true)// 清空VersionModel 快取 public void removeVersion(Long[] str) { // TODO Auto-generated method stub logger.info("把VersionModel快取清空 ,method=removeVersion"); versionDao.removeVersion(str); } //@CacheEvict, beforeInvocation=false表示在方法執行之後呼叫(#result能拿到返回值了);且判斷condition,如果返回true,則移除快取; //@CacheEvict(value = "user", key = "#user.id", beforeInvocation = false, condition = "#result.username ne 'zhang'") //public User conditionDelete(final User user)
參考配置的過期時間