当前位置:   article > 正文

Redis缓存使用及加载流程_使用redis如何缓存并加载网页数据

使用redis如何缓存并加载网页数据
上篇写到SpringBoot的默认缓存是采用了SimpleCache作为缓存;本篇继续将使用Redis作为缓存.

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

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

maven请使用:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

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

spring:
  redis:
    host: 127.0.0.1
  • 1
  • 2
  • 3

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

public class Employee implements Serializable
  • 1

首次请求
在这里插入图片描述
清空控制台并再次请求
在这里插入图片描述
没有输出任何信息,接下来通过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();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

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

end
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/719084
推荐阅读
相关标签
  

闽ICP备14008679号