1. 程式人生 > >Spring快取註解@Cacheable,@CachePut , @CacheEvict使用

Spring快取註解@Cacheable,@CachePut , @CacheEvict使用

設定過期時間沒有效果,需要重新測試一遍,

測試過的資料都 寫在註釋裡了,

@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)   
	

參考配置的過期時間