zoukankan      html  css  js  c++  java
  • SpringBoot2.x整合redis和使用redis缓存

    springboot1.x和2.x对于整合redis略有不同,需注意。

    1、依赖、配置文件

    先引入redis的starter:

    <!-- redis依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- cache依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    View Code

    然后是在properties或者yml中配置基本信息

    # Redis连接池属性
    spring.redis.jedis.pool.mix-idle=5
    spring.redis.jedis.pool.max-active=10
    spring.redis.jedis.pool.max-idle=10
    spring.redis.jedis.pool.max-wait=2000
    ## Redis服务器属性
    spring.redis.port=6379
    spring.redis.host=127.0.0.1
    spring.redis.password=root
    spring.redis.timeout=1000
    spring.redis.database=1
    ## redis缓存管理器
    spring.cache.type=REDIS
    spring.cache.cache-names=redisCache
    spring.cache.redis.use-key-prefix=false
    spring.cache.redis.time-to-live=600000
    View Code

    2、配置序列化器

    如果我们没有配置序列化器,可能显示的数据是这样的:

     我们需要存储一个对象,并且能够很好阅读,那我们就需要自定义序列化器,将数据以json的方法显示:

     代码如下:

    @Configuration
    public class RedisConfig extends CachingConfigurerSupport {
    
        //配置Redistemplate
        @Bean
        public RedisTemplate<String, Object> redisTemplate(
                RedisConnectionFactory redisConnectionFactory)
                throws UnknownHostException {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(redisConnectionFactory);
    
            // 使用Jackson2JsonRedisSerialize 替换默认序列化
            Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL);
            serializer.setObjectMapper(objectMapper);
    
            // 设置value的序列化规则和 key的序列化规则
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(serializer);
            template.setHashKeySerializer(new StringRedisSerializer());
            template.setHashValueSerializer(serializer);
            template.afterPropertiesSet();
    
            return template;
        }
    
        //使用CacheManager缓存
        @Bean
        public CacheManager cacheManager(RedisConnectionFactory factory) {
            RedisSerializer<String> redisSerializer = new StringRedisSerializer();
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    
            //解决查询缓存转换异常的问题
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.activateDefaultTyping(om.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL);
            jackson2JsonRedisSerializer.setObjectMapper(om);
    
            // 配置序列化(解决乱码的问题),过期时间30秒
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                    .entryTtl(Duration.ofSeconds(1800000))
                    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                    .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                    .disableCachingNullValues();
    
            RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                    .cacheDefaults(config)
                    .build();
            return cacheManager;
        }
    }
    View Code

    3、其他

    对于Redistemplate来说,每一次使用都要加上opsForValue等这些,我们可以自己编写一个工具类,用简单一点的名字来代替这些繁琐的操作,网上的例子很多,这里不赘述了。

  • 相关阅读:
    noi.openjudge——2971 抓住那头牛
    P1265 公路修建 洛谷
    P2330 [SCOI2005] 繁忙的都市 洛谷
    P1331 海战 洛谷
    P1464 Function 洛谷
    基于Manhattan最小生成树的莫队算法
    zoj3659
    poj1182
    hdu1325
    hdu3635
  • 原文地址:https://www.cnblogs.com/Neil-learning/p/12637711.html
Copyright © 2011-2022 走看看