詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時(shí)間解決方案
@Cacheable注解不支持配置過(guò)期時(shí)間,所有需要通過(guò)配置CacheManneg來(lái)配置默認(rèn)的過(guò)期時(shí)間和針對(duì)每個(gè)類或者是方法進(jìn)行緩存失效時(shí)間配置。
解決可以采用如下的配置信息來(lái)解決的設(shè)置失效時(shí)間問(wèn)題
配置信息
@Bean public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {return new RedisCacheManager(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),this.getRedisCacheConfigurationWithTtl(30*60), // 默認(rèn)策略,未配置的 key 會(huì)使用這個(gè)this.getRedisCacheConfigurationMap() // 指定 key 策略); } private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();//SsoCache和BasicDataCache進(jìn)行過(guò)期時(shí)間配置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上的信息,來(lái)替換類上cacheNames的信息@Cacheable(value = 'BasicDataCache',keyGenerator = 'wiselyKeyGenerator')public String getTokenByGsid(String gsid)
效果展示
到此這篇關(guān)于詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時(shí)間解決方案的文章就介紹到這了,更多相關(guān)SpringBoot2.0緩存失效內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. IntelliJ IDEA設(shè)置條件斷點(diǎn)的方法步驟2. idea修改背景顏色樣式的方法3. IDEA設(shè)置編碼背景色的方法4. Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)5. vue使用webSocket更新實(shí)時(shí)天氣的方法6. javascript正則表達(dá)式檢驗(yàn)7. Java中使用Properties配置文件的簡(jiǎn)單方法8. JS圖片懶加載庫(kù)VueLazyLoad詳解9. Android 實(shí)現(xiàn)徹底退出自己APP 并殺掉所有相關(guān)的進(jìn)程10. php字符串中轉(zhuǎn)義成特殊字符實(shí)例講解
