【spring boot】2.0 配置@cacheable 自定義序列化方式 緩存數據到redis


一&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);}}

配置

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;}}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM