Spring Boot 工程启动以后,我希望将数据库中已有的固定内容,打入到 Redis 缓存中,请问如何处理?

DBC 63 0

一、启动时主动加载数据到 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 的序列化方式。

发表评论 取消回复
表情 图片 链接 代码

分享