Redis缓存使用及加载流程

上篇写到SpringBoot的默认缓存是采用了SimpleCache作为缓存;本篇继续将使用Redis作为缓存.

首先导入redis相关jar,我这里使用的是gradle构建.

implementation("org.springframework.boot:spring-boot-starter-data-redis")

maven请使用:

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

启动本地redis
直接在yml中配置host即可,其他默认

spring:
  redis:
    host: 127.0.0.1

实体类实例化Serializable接口,并进行缓存测试

public class Employee implements Serializable

首次请求
在这里插入图片描述
清空控制台并再次请求
在这里插入图片描述
没有输出任何信息,接下来通过redis可视化查看缓存
在这里插入图片描述
此时缓存已经存到了redis中,但是经过转码,可视化效果并不好,那是因为redis默认使用的是 JdkSerializationRedisSerializer 进行的序列化.
接下来看源码,为什么会导入redis的jar就会默认使用redis进行作为缓存及redis默认使用的序列化方式和自定义Redis序列化


断点 -> 详细跳转步骤
在这里插入图片描述由上篇文章(SpringBoot默认缓存使用和源码剖析)可知缓存配置的加载顺序是
在这里插入图片描述
进入org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
根据类上注解判断该类可以执行,并在IoC中创建了CacheManager
在这里插入图片描述
继续向下翻看,可以看出默认使用的是jdk序列化
在这里插入图片描述

因为执行顺序,接下来看SpringBoot默认的缓存SimpleCache,此时不成立,所以该类不能被执行

在这里插入图片描述


自定义Redis序列化

@Configuration
public class RedisConfig {

	@Bean
	public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
		// 分别创建String和JSON格式序列化对象,对缓存数据key和value进行转换
		//key
		RedisSerializer<String> strSerializer = new StringRedisSerializer();
		//value
		Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
		// 解决查询缓存转换异常问题
		ObjectMapper om = new ObjectMapper();
		om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
		jacksonSeial.setObjectMapper(om);
		// 定制缓存数据序列化方式及时效
		RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
				//设置缓存数据的有效期为 1 天
				.entryTtl(Duration.ofDays(1))
				//key的序列化方式为String
				.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(strSerializer))
				//value的序列化方式为JSON
				.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jacksonSeial))
				.disableCachingNullValues();
		return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();
	}
}

清空redis缓存.再次启动并测试查看
在这里插入图片描述

end
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

s_wei_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值