Spring Boot 启动时预加载数据库数据到 Redis
在 Spring Boot 应用中,将数据库数据预加载到 Redis 缓存可以显著提升系统性能,减少数据库访问压力。下面介绍几种实现方式,包括代码示例和详细说明。
使用 ApplicationRunner 或 CommandLineRunner
Spring Boot 提供了 ApplicationRunner 和 CommandLineRunner 接口,允许在应用启动后执行特定逻辑。这两种方式适合预加载数据到 Redis。
实现 ApplicationRunner
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class RedisDataLoader implements ApplicationRunner {
private final RedisTemplate<String, Object> redisTemplate;
private final UserRepository userRepository;
public RedisDataLoader(RedisTemplate<String, Object> redisTemplate, UserRepository userRepository) {
this.redisTemplate = redisTemplate;
this.userRepository = userRepository;
}
@Override
public void run(ApplicationArguments args) {
List<User> users = userRepository.findAll();
users.forEach(user -> {
String key = "user:" + user.getId();
redisTemplate.opsForValue().set(key, user);
});
System.out.println("Loaded " + users.size() + " users into Redis");
}
}
实现 CommandLineRunner
import org.springframework.boot.CommandLineRunner;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class RedisDataLoader implements CommandLineRunner {
private final RedisTemplate<String, Object> redisTemplate;
private final ProductRepository productRepository;
public RedisDataLoader(RedisTemplate<String, Object> redisTemplate, ProductRepository productRepository) {
this.redisTemplate = redisTemplate;
this.productRepository = productRepository;
}
@Override
public void run(String... args) {
List<Product> products = productRepository.findAll();
products.forEach(product -> {
String key = "product:" + product.getId();
redisTemplate.opsForValue().set(key, product
1571

被折叠的 条评论
为什么被折叠?



