一、启动时主动加载数据到 Redis
1.使用 CommandLineRunner或 ApplicationRunner 接囗
这两个接口允许在应用启动完成后执行初始化逻辑,适合主动加载数据到缓存。
@Component
public class CacheLoader implements CommandLineRunner {
@Autowired
private MySqlRepository repository;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Override
public void run(String... args) {
List<MsgDO> data = repository.list();
redisTemplate.opsForValue().set("key", data);
}
}
2.使用 @PostConstruct 注解
在服务类中通过 @Postconstruct注解标记等初始化方法,在 Bean 创建后立即执行数据加载。
@Service
public class AreaService {
// 注入相关 bean
@PostConstruct
public void init() {
// TODO 存入数据
}
}
二、依赖缓存注解的懒加载
使用 @Cacheable 注解
通过 @cacheable 在首次调用方法时触发缓存写入,但需手动触发首次调用才能完成预加载。
@Service
public class AreaService {
@Cacheable(value = "cache", key = "'key'")
public Object getGuangzhouShenzhenArea() {
return getData();
}
}
推荐方案:使用 CommandLineRunner 或 @PostConstruct 在启动时主动加载数据到Redis,确保缓存立即可用。
注解补充:@Cacheable 适用于懒加载场景,但需结合首次调用触发。
注意事项:确保实体类实现 Serializable 接口,并正确配置 RedisTemplate 的序列化方式。
本文作者为DBC,转载请注明。