一、启动时主动加载数据到 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,转载请注明。