SpringBoot(十四)——————SpringBoot整合Redis

redis官网:http://www.redis.cn

源码地址:https://github.com/877148107/springboot_integrate/tree/master/springboot-integrate-cache-redis

  • 安装redis

1.用docker安装redis

docker命令:docker pull registry.docker-cn.com/library/redis、docker pull redis

2.启动redis

docker命令:docker run -d -p 6379:6379 --name myredis 44d36d2c2374(IMAGE ID)

3.redis工具连接

  • SpringBoot整合Redis

1.引入spring-boot-starter-data-redis

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

2.配置redis主机地址

spring.redis.host=192.168.0.113

3.测试redis是否生效

@SpringBootTest
class SpringbootIntegrateCacheRedisApplicationTests {

    @Autowired
    EmployeeService employeeService;

    @Autowired
    RedisTemplate redisTemplate;

    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @Autowired
    RedisTemplate empRedisTemplate;

    @Test
    void testRedis(){
        empRedisTemplate.opsForValue().set("emp-01",employeeService.getEmp(3));
    }

    @Test
    void contextLoads() {
        Employee emp = employeeService.getEmp(3);
        System.out.println(emp);
    }

}

  •  Redis自动配置原理

1.redis自动配置类RedisAutoConfiguration、redis缓存配置类RedisCacheConfiguration

@AutoConfigureAfter自动配置类加载完成后加载此类

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisConnectionFactory.class)
//自动配置类加载完成后加载此类
@AutoConfigureAfter(RedisAutoConfiguration.class)
@ConditionalOnBean(RedisConnectionFactory.class)
@ConditionalOnMissingBean(CacheManager.class)
@Conditional(CacheCondition.class)
class RedisCacheConfiguration {

2.RedisCacheConfiguration给容器中添加RedisCacheManager

@Bean
RedisCacheManager cacheManager(CacheProperties cacheProperties, CacheManagerCustomizers cacheManagerCustomizers,
		ObjectProvider<org.springframework.data.redis.cache.RedisCacheConfiguration> redisCacheConfiguration,
		ObjectProvider<RedisCacheManagerBuilderCustomizer> redisCacheManagerBuilderCustomizers,
		RedisConnectionFactory redisConnectionFactory, ResourceLoader resourceLoader) {
	RedisCacheManagerBuilder builder = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(
			determineConfiguration(cacheProperties, redisCacheConfiguration, resourceLoader.getClassLoader()));
	List<String> cacheNames = cacheProperties.getCacheNames();
	if (!cacheNames.isEmpty()) {
		builder.initialCacheNames(new LinkedHashSet<>(cacheNames));
	}
	redisCacheManagerBuilderCustomizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
	return cacheManagerCustomizers.customize(builder.build());
}

3.RedisCacheManager创建RedisCache作为缓存组件,RedisCache通过操作redis缓存数据

        redis的序列化机制默认使用的jdk序列化机制

/**
 * Configuration hook for creating {@link RedisCache} with given name and {@code cacheConfig}.
 *
 * @param name must not be {@literal null}.
 * @param cacheConfig can be {@literal null}.
 * @return never {@literal null}.
 */
protected RedisCache createRedisCache(String name, @Nullable RedisCacheConfiguration cacheConfig) {
	return new RedisCache(name, cacheWriter, cacheConfig != null ? cacheConfig : defaultCacheConfig);
}

4.redis缓存用JSON格式存储

由于Spring boot2.x与Springboot1.x不同,因此作废缓存处理方式不同

springboot2.x如下

@Configuration
public class MyRedisConfig {

    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        Jackson2JsonRedisSerializer<Object> redisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        redisSerializer.setObjectMapper(objectMapper);
        RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer));
        RedisCacheManager redisCacheManager = RedisCacheManager.builder(connectionFactory).cacheDefaults(cacheConfiguration).build();
        return redisCacheManager;
    }
}

Springboot1.x如下

@Configuration
public class MyRedisConfig {

    @Bean(value = "empRedisTemplate")
    public RedisTemplate<Object, Employee> empRedisTemplate(RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        RedisTemplate<Object, Employee> template = new RedisTemplate<Object, Employee>();
        template.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer<Employee> serializer = new Jackson2JsonRedisSerializer<Employee>(Employee.class);
        template.setDefaultSerializer(serializer);
        return template;
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值