• @Cacheable注解 给接口加Redis缓存 并配置过期时间


        @GetMapping("/information")
        @Cacheable(cacheNames = "dfs_screen_information", key = "'lineId=' + #lineId + ',componentName=' + #componentName + ',dateIn=' +  #dateIn")
        public ResponseData workOrderInformation(@RequestParam(value = "componentName", required = false) String componentName,
                                                 @RequestParam(value = "date", required = false) String dateIn,
                                                 @RequestParam(value = "lineId", required = false) Integer lineId) {
            if (isHistory(componentName, dateIn)) {
                return ResponseData.success(this.getHistoryData(componentName, dateIn));
            }
            Date date = getDate(dateIn);
            return ResponseData.success(productionService.workOrderInformation(lineId, date));
        }
    cacheNames :缓存名称 全局唯一
    key :不写默认使用方法名称,没有入参可以不写 ,有入参必写,否则会导致数据错误(key值变化时会更新缓存)

    Redis配置类:

    package com.yelink.dfs.config;
    
    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.springframework.cache.CacheManager;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.cache.RedisCacheConfiguration;
    import org.springframework.data.redis.cache.RedisCacheManager;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.listener.RedisMessageListenerContainer;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    import java.time.Duration;
    import java.util.Objects;
    
    /**
     * redis配置类
     *
     * @author shuang
     */
    @Configuration
    public class RedisConfig {
    
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(factory);
    
            Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            jackson2JsonRedisSerializer.setObjectMapper(om);
    
            StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
            // key采用String的序列化方式
            template.setKeySerializer(stringRedisSerializer);
            // hash的key也采用String的序列化方式
            template.setHashKeySerializer(stringRedisSerializer);
            // value序列化方式采用jackson
            template.setValueSerializer(jackson2JsonRedisSerializer);
            // hash的value序列化方式采用jackson
            template.setHashValueSerializer(jackson2JsonRedisSerializer);
            template.afterPropertiesSet();
    
            return template;
        }
    
    
        @Bean
        RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
            RedisMessageListenerContainer container = new RedisMessageListenerContainer();
            container.setConnectionFactory(connectionFactory);
            return container;
        }
    
        /**
         * redis缓存管理器
         */
        @Bean
        public CacheManager screenCacheManager(RedisTemplate<String, Object> template) {
            return RedisCacheManager.RedisCacheManagerBuilder
                    //Redis链接工厂
                    .fromConnectionFactory(Objects.requireNonNull(template.getConnectionFactory()))
                    // 默认缓存 过期时间配置1h
                    //.cacheDefaults(getCacheConfigurationWithTtl(60 * 60))
                    // 生产大屏缓存 过期时间
                    .withCacheConfiguration("dfs_screen_information", getCacheConfigurationWithTtl(5))
                    //配置同步修改或删除(事务感知)
                    .transactionAware()
                    .build();
        }
    
    
        /**
         * 缓存配置
         *
         * @param seconds 过期时间 s
         * @return
         */
        private RedisCacheConfiguration getCacheConfigurationWithTtl(long seconds) {
            return RedisCacheConfiguration
                    .defaultCacheConfig()
                    // 不缓存null值
                    .disableCachingNullValues()
                    // 缓存数据保存时间设置
                    .entryTtl(Duration.ofSeconds(seconds));
        }
    }
  • 相关阅读:
    day04用户交互和运算符
    day04垃圾回收机制
    day4
    B2. K for the Price of One (Hard Version)
    C. New Year and Permutation
    Rational Ratio
    C. Two Arrays
    D. MEX maximizing
    B. Infinite Prefixes
    C. Obtain The String
  • 原文地址:https://www.cnblogs.com/axibug/p/16405739.html
Copyright © 2020-2023  润新知