• Spring Boot 整合 Redis 并设置序列化类型


    1.Spring Boot 整合 Redis

    1.1 导入依赖

    如果在创建Spring Boot项目的时候需要使用Redis的话, 只需要导入下面一个依赖就可:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    

    1.2 配置Redis链接属性

    配置Redis属性, 用application.xmlapplication.yml都可以, 这里示例使用的是更简洁的application.yml

    spring:
      redis:
        host: 127.0.0.1 # redis的ip
        port: 6379  # 端口号
        password: ******    # redis的密码, 如果没有密码可以不配置此项
        database: 0 # redis的index
        timeout: 6000   # 连接redis的超时时间, ms
          jedis:    # jedis连接池配置
            pool:
              min-idle: 5   # 最小空闲连接数
              max-idle: 10  # 最大空闲连接数
              max-active: 15    # 最大活跃连接数
              max-wait: 5000    # 最大阻塞等待时间, ms
    

    1.3 使用

    RedisAutoConfiguration为我们默认配置了JedisConnectionFactory, RedisTemplate以及StringRedisTemplate, 让我们可以直接的使用Redis作为数据储存

    @Autowired
    private RedisTemplate redisTemplate;
    
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    

    String Data Redis为我们提供了RedisTemplateStringRedisTemplate两个模版来进行数据操作, 其中:
    StringRedisTemplate只针对键值都是字符串的数据进行操作.
    当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据可中的

    RedisTemplate 默认使用的是 JdkSerializationRedisSerializer
    StringRedisTemplate 默认使用的是 StringRedisSerializer
    

    Spring Data JPA为我们提供了下面的 Serializer:

    1. GenericToStringSerializer
    2. Jackson2JsonRedisSerializer
    3. JdkSerializationRedisSerializer
    4. OxmSerializer
    5. StringRedisSerializer

    2.配置 RedisTemplate 序列化类型

    Spring Boot为我们自动配置了RedisTemplate, 而RedisTemplate使用的是JdkSerializationRedisSerializer, 这个对我们用redis图形化客户端很不直观, 因为JdkSerializationRedisSerializer使用二进制形式储存数据, 在此我们将自己配置RedisTemplate并定义Serializer

    package com.kutesmart.bl.config.config;
    
    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.RedisSerializer;
    
    /**
     * @author jiangkd
     * @date 2021/2/7 14:24
     */
    @Configuration
    public class RedisTemplateConfig {
    
        @Autowired
        private RedisConnectionFactory redisConnectionFactory;
    
        /**
         * 注入RedisTemplate<String, Object>
         *
         * @return RedisTemplate
         */
        @Bean("stringObjectRedisTemplate")
        public RedisTemplate<String, Object> redisTemplate() {
            // 创建 redisTemplate 模版
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            // 关联 redisConnectionFactory
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            // 序列化格式
            RedisSerializer<String> stringSerializer = redisTemplate.getStringSerializer();
            // 创建序列化器
            Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer =
                    new Jackson2JsonRedisSerializer<>(Object.class);
    
            ObjectMapper objectMapper = new ObjectMapper();
            // 设置可见度
            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            // 启动默认的类型
            objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            // 序列化类, 对象映射设置
            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    
            // 设置 value 的转化格式和 key 的转化格式
            redisTemplate.setKeySerializer(stringSerializer);
            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
            redisTemplate.setHashKeySerializer(stringSerializer);
            redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
    
            return redisTemplate;
        }
    }
    
    
  • 相关阅读:
    hdu2112 HDU Today 基础最短路
    HDU 4597 Play Game(记忆化搜索,深搜)
    HDU 4496 D-City(并查集,逆思维)
    集训心情记录,,,,(2014.6.20-6.29)
    ZOJ 1115 Digital Roots(简单,字符串与数)
    ZOJ 2971 Give Me the Number;ZOJ 2311 Inglish-Number Translator (字符处理,防空行,strstr)
    HDU 3623 Best Cow Line, Gold(模拟,注意思路,简单)
    poj 3903 Stock Exchange(最长上升子序列,模版题)
    POJ 3253 Fence Repair(优先队列,哈夫曼树,模拟)
    hdu 2571 命运(递推,请小心)
  • 原文地址:https://www.cnblogs.com/no-celery/p/14582595.html
Copyright © 2020-2023  润新知