一&m; id dot;背景描述
spring 的 @ cache able 已成為我們比較常用的緩存 數據 的方式,但是把非String對象緩存到 redis 后在使用RedisDesktopManager等 軟件 查看緩存的數據的時候 展示的是HEX 數據,觀察起來比較不方便,所以我們這里自定義了FastJsonRedisSerializer 序列化對象后緩存到redis,可以更 方便的觀察緩存數據。
二·引入jar包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastJson</artifactId><version>1.2.17</version></dependency>
三· 代碼
1·自定義序列化方式
import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.serializer.SerializerFeature;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.SerializationException;import java.nio.charset.Charset;/** * 說明:自定義redis序列化方式 * * @author WangBin * @version V1.0 * @since 2018.03.22 */publicclassFastJsonRedisSerializer<T>implementsRedisSerializer<T>{publicstaticfinalCharset DEFAULT_CHARSET =Charset.forName("UTF-8");privateClass<T> clazz;publicFastJsonRedisSerializer(Class<T> clazz){super();this.clazz = clazz;}@Overridepublicbyte[] serialize(T t)throwsSerializationException{if(t ==null){returnnewbyte[0];}return JSON.toJSONString(t,SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);}@Overridepublic T deserialize(byte[] bytes)throwsSerializationException{if(bytes ==null|| bytes.length <=0){returnnull;}String str =newString(bytes, DEFAULT_CHARSET);return JSON.parseObject(str, clazz);}}
2· 配置
import org.springframework.cache.annotation.CachingConfigurerSupport;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheConfiguration;import org.springframework.data.redis.serializer.RedisSerializationContext;import java.time.Duration;/** * * @author WangBin * @version V1.0 * @date 2017.12.05 */@Configuration@EnableCachingpublicclassRedisConfigextendsCachingConfigurerSupport{/** * 設置 redis 數據默認過期時間 * 設置@cacheable 序列化方式 * @return */@BeanpublicRedisCacheConfiguration redisCacheConfiguration(){FastJsonRedisSerializer<Object> fastJsonRedisSerializer =newFastJsonRedisSerializer<>(Object.class);RedisCacheConfiguration configuration =RedisCacheConfiguration.defaultCacheConfig(); configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofDays(30));return configuration;}}