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;
    }
}

posted @   KILLNPE  阅读(611)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示