1. 程式人生 > >Springboot方便的使用快取tair

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自定義註解使用快取,大體思路差不多,但是自由度高些。