19、SpringBoot 使用Redis作为缓存

1、添加redis的场景启动器依赖

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

2、编写application.yml配置

 

 3、测试使用redisTemplate和StringRedisTemplate

    @Autowired
    RedisTemplate redisTemplate;
    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @Autowired
    RedisTemplate<Object, Object> myRedisTemplate;

    @Test
    void test() {
        //stringRedisTemplate.opsForValue().set("msg","hello,word");
        Employee empId = employeeService.getEmpId(1);
        myRedisTemplate.opsForValue().set("emp-01",empId);
    }

4、编写自定义的redisTemplate,用Json序列化保存数据到redis 的配置类


@Configuration
public class MyRedisConfig {

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

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

@Primary
@Bean
public CacheManager empCustomizeCacheManager(RedisTemplate<Object, Employee> empRedisTemplate) {
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(Objects.requireNonNull(empRedisTemplate.getConnectionFactory()));

Jackson2JsonRedisSerializer<Employee> serializer = new Jackson2JsonRedisSerializer<>(Employee.class);

RedisSerializationContext<Employee, Employee> serializationContext = RedisSerializationContext.fromSerializer(serializer);
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(serializationContext.getValueSerializationPair());

return new RedisCacheManager(redisCacheWriter,redisCacheConfiguration);
}

@Bean
public CacheManager deptCustomizeCacheManager(RedisTemplate<Object, Department> deptRedisTemplate) {
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(Objects.requireNonNull(deptRedisTemplate.getConnectionFactory()));

Jackson2JsonRedisSerializer<Department> serializer = new Jackson2JsonRedisSerializer<>(Department.class);

RedisSerializationContext<Department, Department> serializationContext = RedisSerializationContext.fromSerializer(serializer);
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(serializationContext.getValueSerializationPair());

return new RedisCacheManager(redisCacheWriter,redisCacheConfiguration);
}
 

6、如果将Java对象保存到redis中,需要将这个实体类实现序列化

public class Employee implements Serializable
public class Department implements Serializable {

 7、在调用缓存的Service的时候,必须指定用的是哪个缓存管理器

 

posted @ 2021-06-21 12:16  shunnWcs  阅读(123)  评论(0)    收藏  举报