Springboot方便的使用快取tair
原始的使用快取的方式如下: 這樣的快取使用方式程式碼侵入性強,重複程式碼也多。 在Spring Boot中對於快取的支援,提供了一系列的自動化配置,使我們可以非常方便的使用快取。 Spring定義了org.springframework.cache.CacheManager和org.springframework.cache.Cache介面用來統一不同的快取的技術。其中,CacheManager是Spring提供的各種快取技術抽象介面,Cache介面包含快取的各種操作(增加、刪除、獲得快取,我們一般不會直接和此介面打交道)。 對於上述各類快取,spring已經很方便的支援,只需要在配置檔案裡新增快取type即可。很顯然我們使用的tair不能這樣使用。 這樣需要我們在springboot中引入自定義快取(tair)。 使用自定義的關鍵是org.springframework.cache.CacheManage,事實上tair是支援CacheManage的操作方式
第一步:引入CacheManage Maven 依賴 匯入 pandora-boot-starter-bom, 參考普通Tair使用。 在(注意不是/)下新增依賴(無須寫版本):
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>pandora-tair-jcache-spring-boot-starter</artifactId>
</dependency>
上面是tair技術文件的內容。下面是原始碼。 能看到springCacheManager被註冊到了容器。 第二步:把springCacheManager配置到springboot中。 springboot預設是使用ConcurrentMapCacheManager快取,debug原始碼可以看到cache型別。我們需要手動配置tair作為快取。
package com.alibaba.middleware.tair; import java.lang.reflect.Method; import javax.annotation.Resource; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.CacheErrorHandler; import org.springframework.cache.interceptor.CacheResolver; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.alibaba.boot.tair.TairConstants; /** * @author wb-yzy390158 * @date 2018年4月16日 下午12:39:34 */ @Configuration @EnableCaching public class TairCachingConfigurer extends CachingConfigurerSupport { @Resource(name = TairConstants.SPRING_CACHE_MANAGER_BEAN_NAME) private CacheManager cacheManager; /** * 指定使用哪一種快取 * @param * @return */ @Bean public CacheManager cacheManager() { return cacheManager; } /** * 指定預設的key生成方式 * @return */ @Override public org.springframework.cache.interceptor.KeyGenerator keyGenerator() { KeyGenerator keyGenerator = new KeyGenerator() { @Override public Object generate(Object o, Method method, Object... objects) { StringBuilder sb = new StringBuilder(); sb.append(o.getClass().getName()); return sb.toString(); } }; return keyGenerator; } @Override public CacheResolver cacheResolver() { return super.cacheResolver(); } @Override public CacheErrorHandler errorHandler() { return super.errorHandler(); } }
配置好以後,預設的快取策略就是使用tair。 第三部:註解使用快取。 使用@EnableCaching 開啟
然後直接使用@Cacheable、@CachePut、@CacheEvict。 這樣使用有一個問題,註解裡的key不能使用,debug搞了半天也不明白為什麼,key裡的值沒有被攔截器取到,只能使用自動生成key。 這樣就可以方便的使用tair了。這個時候的key是拼裝的。 感興趣的同學可以看看原始碼,debug看一下。存取刪都能在com.taobao.tair.jcache.TairCache這個類裡看到。 經我簡單的測試,已經可以註解使用快取了,這是springboot提供的方式。整體來說很簡單,不過也有不便的地方,快取時間不好設定。其實還可以利用aop自定義註解使用快取,大體思路差不多,但是自由度高些。