詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時間解決方案
問題
@Cacheable注解不支持配置過期時間,所有需要通過配置CacheManneg來配置默認(rèn)的過期時間和針對每個類或者是方法進(jìn)行緩存失效時間配置。
解決
可以采用如下的配置信息來解決的設(shè)置失效時間問題
配置信息
@Bean public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { return new RedisCacheManager( RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory), this.getRedisCacheConfigurationWithTtl(30*60), // 默認(rèn)策略,未配置的 key 會使用這個 this.getRedisCacheConfigurationMap() // 指定 key 策略 ); } private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() { Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>(); //SsoCache和BasicDataCache進(jìn)行過期時間配置 redisCacheConfigurationMap.put("SsoCache", this.getRedisCacheConfigurationWithTtl(24*60*60)); redisCacheConfigurationMap.put("BasicDataCache", this.getRedisCacheConfigurationWithTtl(30*60)); return redisCacheConfigurationMap; } private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) { Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig(); redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith( RedisSerializationContext .SerializationPair .fromSerializer(jackson2JsonRedisSerializer) ).entryTtl(Duration.ofSeconds(seconds)); return redisCacheConfiguration; } @Bean public KeyGenerator wiselyKeyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append("." + method.getName()); if(params==null||params.length==0||params[0]==null){ return null; } String join = String.join("&", Arrays.stream(params).map(Object::toString).collect(Collectors.toList())); String format = String.format("%s{%s}", sb.toString(), join); //log.info("緩存key:" + format); return format; } }; }
使用方式
@CacheConfig(cacheNames = "SsoCache") public class SsoCache{ @Cacheable(keyGenerator = "wiselyKeyGenerator") public String getTokenByGsid(String gsid) } //二者選其一,可以使用value上的信息,來替換類上cacheNames的信息 @Cacheable(value = "BasicDataCache",keyGenerator = "wiselyKeyGenerator") public String getTokenByGsid(String gsid)
效果展示
到此這篇關(guān)于詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時間解決方案的文章就介紹到這了,更多相關(guān)SpringBoot2.0緩存失效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java堆棧類使用實(shí)例(java中stack的使用方法)
java中stack的使用方法,堆棧是一種"后進(jìn)先出"(LIFO) 的數(shù)據(jù)結(jié)構(gòu), 只能在一端進(jìn)行插入(稱為"壓棧") 或刪除 (稱為"出棧")數(shù)據(jù)的操作,下面看示例吧2013-12-12Java Swing BoxLayout箱式布局的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java Swing BoxLayout箱式布局的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Springboot+MyBatis進(jìn)行日志輸出參考示例
這篇文章主要給大家介紹了關(guān)于Springboot+MyBatis進(jìn)行日志輸出的相關(guān)資料,在項(xiàng)目開發(fā)過程中,日志是必不可少的,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08Java中隊(duì)列Queue和Deque的區(qū)別與代碼實(shí)例
學(xué)過數(shù)據(jù)結(jié)構(gòu)的,一定對隊(duì)列不陌生,java也實(shí)現(xiàn)了隊(duì)列,下面這篇文章主要給大家介紹了關(guān)于Java中隊(duì)列Queue和Deque區(qū)別的相關(guān)資料,需要的朋友可以參考下2021-08-08ES6學(xué)習(xí)筆記之新增數(shù)據(jù)類型實(shí)例解析
這篇文章主要介紹了ES6學(xué)習(xí)筆記之新增數(shù)據(jù)類型,結(jié)合實(shí)例形式分析了ES6數(shù)據(jù)解構(gòu)賦值、新增數(shù)據(jù)類型Set集合、新增數(shù)據(jù)類型Map、Symbol類型等相關(guān)原理與操作注意事項(xiàng),需要的朋友可以參考下2020-01-01