欢迎光临散文网 会员登陆 & 注册

SpringBoot 中如何使用Redis缓存?

2023-03-05 22:23 作者:编程救不了你们  | 我要投稿


在SpringBoot中,使用Redis缓存可以通过以下几个步骤:

1、添加Redis依赖

在Maven项目中,可以在pom.xml文件中添加以下依赖:

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

2、配置Redis连接

在application.properties或application.yml文件中,配置Redis连接信息,如下所示:

spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=

3、配置Redis缓存管理器

在Java代码中,使用以下代码配置Redis缓存管理器:

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(10))
                .disableCachingNullValues()
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new Jackson2JsonRedisSerializer<>(Object.class)));

        return RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
    }
}

这段代码中,我们创建了一个RedisTemplate对象,用于与Redis进行交互,同时也创建了一个CacheManager对象,用于管理Redis缓存。

在上述代码中,我们使用了Jackson2JsonRedisSerializer作为值序列化器,以便将Java对象序列化为JSON格式存储在Redis中。

4、在业务代码中使用Redis缓存

在需要使用Redis缓存的方法上添加@Cacheable注解即可,如下所示:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Cacheable(value = "users", key = "#id")
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
}

这段代码中,我们在getUserById方法上添加了@Cacheable注解,并指定了缓存名称为“users”,缓存键为方法参数id。这样,在第一次调用该方法时,方法的返回值将被存储在Redis缓存中。

在下一次调用该方法时,如果缓存中已经存在相同的缓存键,则直接返回缓存中的数据,而不是再次执行方法。

5、注意事项

在使用SpringBoot中的Redis缓存时,需要注意以下几点:

5.1 Redis配置信息的正确性

在application.properties或application.yml文件中配置Redis连接信息时,需要确保配置信息的正确性,包括Redis主机地址、端口号、密码等。

5.2 RedisTemplate的配置

RedisTemplate是用于与Redis进行交互的对象,需要根据具体业务需求进行配置。例如,需要为RedisTemplate指定key和value的序列化器,以便将Java对象序列化为Redis可存储的格式。

5.3 CacheManager的配置

CacheManager是用于管理Redis缓存的对象,需要根据具体业务需求进行配置。例如,需要为CacheManager指定缓存的默认过期时间、缓存的序列化方式等。

5.4 缓存键的命名规范

在使用@Cacheable注解时,缓存键的命名需要符合一定的规范,以便在缓存中唯一标识该缓存。通常可以使用“类名:方法名:参数值”作为缓存键的命名规范。

5.5 缓存穿透问题

当缓存中不存在某个key对应的数据时,如果不做任何处理,每次调用该方法都会查询数据库,导致缓存穿透。为了解决这个问题,可以使用“空值缓存”或“布隆过滤器”等方式。

5.6 缓存雪崩问题

当缓存中大量的数据同时失效,导致大量的请求直接落到数据库上,造成数据库压力过大,导致系统崩溃,这就是缓存雪崩问题。为了解决这个问题,可以采用多级缓存、缓存数据的随机过期时间等方式。


SpringBoot 中如何使用Redis缓存?的评论 (共 条)

分享到微博请遵守国家法律