栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis缓存使用及加载流程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis缓存使用及加载流程

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

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

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

maven请使用:


    org.springframework.boot
    spring-boot-starter-data-redis

启动本地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 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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999749.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号