springboot - 2.7.3版本 - (二)整合Redis

一,安装Redis,参考博客:Redis | Redis 单机版安装与使用(Window)_星尘Pro的博客-CSDN博客

二,在项目中使用

1)pom.xml中添加依赖如下:

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

<!--spring2.0集成redis所需common-pool2-->
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-pool2</artifactId>
</dependency>

2)添加配置,放在spring目录下面:

 springboot 1.5.x版本的默认的Redis客户端是 Jedis实现的,springboot 2.x版本中默认客户端是用 lettuce实现的。

# =============================================================
  redis:
    #数据库索引
    database: 0
    host: 127.0.0.1
    port: 6379
    password:  
    lettuce:
      pool:
        #连接池最大连接数(使用负值表示没有限制)
        max-active: 8
        #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1
        #连接池中的最大空闲连接
        max-idle: 8
        #连接池中的最小空闲连接
        min-idle: 0
    #连接超时时间(毫秒)
    timeout: 30000

# ==============================================================

3)添加配置类:

在SpringBoot中使用RedisTemplate,如果不指定序列化的方式,就会导致redis的key及value的可读性变差,所以,我们需要使用序列化的工具类,来序列化和反序列化数据。

package com.qi.study.springboot.config;

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.StringRedisSerializer;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;

@Configuration
public class RedisConfiguration {

	/**
	 * 设置redis键值的序列化方式
	 * @param redisConnectionFactory
	 * @return
	 */
	@Bean
	public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
		RedisTemplate<String, Object> template = new RedisTemplate<>();
		template.setConnectionFactory(redisConnectionFactory);
		
		/*
		 * value值的序列化可采用如下几种方式
		 * 1.默认采用JdkSerializationRedisSerializer 序列化后的长度最短,时间适中,但不是明文显示
		 * 2.采用Jackson2JsonRedisSerializer 明文显示,序列化速度最快,长度适中,但会使存入redis中timestamp类型的数据以long类型存储
		 * 3.采用GenericJackson2JsonRedisSerializer 明文显示,在redis中显示了@class字段保存有类型的包路径,反序列化更容易,但是序列化时间最长,长度最大,明文显示
		 * 4.自定义FastJsonRedisSerializer实现RedisSerializer接口
		 * 
		 * 这里使用Jackson2JsonRedisSerializer,并对日期类型做特别处理
		 */
		
		Jackson2JsonRedisSerializer<Object> redisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
		ObjectMapper om = new ObjectMapper();
        // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        /*
         *  指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
         *  过期方法:om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
         */
		om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY);
        
        // 日期序列化处理
        om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        om.registerModule(new Jdk8Module())
                .registerModule(new JavaTimeModule())
                .registerModule(new ParameterNamesModule());
        redisSerializer.setObjectMapper(om);
        
        // 设置值(value)的序列化采用Jackson2JsonRedisSerializer
		template.setValueSerializer(redisSerializer);
		template.setHashValueSerializer(redisSerializer);
		
		// 设置键(key)的序列化采用StringRedisSerializer
		template.setKeySerializer(new StringRedisSerializer());
		template.setHashKeySerializer(new StringRedisSerializer());
		
		template.afterPropertiesSet();

		return template;
	}
	
}

三,添加测试代码,代码结构如下:

  

1)测试存储数据,中文以及日期格式:

 使用工具连接Redis,查看结果如下:

 2)测试获取数据,结果如下:

 四,返回日期类型格式处理,添加如下配置,放在spring目录下面:

# =========================================================================
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
# =========================================================================

 

四,源代码下载:https://download.csdn.net/download/MyNoteBlog/86608807

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值