redis实现启动加载以及定时更新
提要:由于项目采用的是mongodb存储数据,redis作为中间的缓存,需要启动时加载数据库的一些数据。启动时自动加载最近一个星期的所有浏览记录和活跃的数据1、在
·
提要:由于项目采用的是mongodb存储数据,redis作为中间的缓存,需要启动时加载数据库的一些数据。
目录
一、实现
1.项目启动时自动加载数据
通过添加@postConstrust注解实现,被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。@PostConstruct在构造函数之后执行,init()方法之前执行,@ProDestroy方法在destory方法执行之后执行,在Servlet被彻底卸载之前。执行顺序流程如下:
实现代码
public void initData(){
pool.execute(new Runnable() {
@Override
public void run() {
log.info("启动加载数据");
userService.loadAllUser();
recordService.loadAllRecords();
}
});
}
启动时自动加载最近一个星期的所有浏览记录和活跃的数据
2、缓存定时更新
1、在定时更新的方法上添加@Scheduled
注解,但是要注意要使用@Scheduled
注解,首先需要在启动类添加@EnableScheduling
,启用Spring的计划任务执行功能,这样可以在容器中的任何Spring管理的bean上检测@Scheduled
注解,执行计划任务,
cron=”0 0 20 * * ?“,代表每天晚上8点自动更新。一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
按顺序依次为
秒(0~59)
分钟(0~59)
小时(0~23)
天(月)(0~31,但是你需要考虑你月的天数)
月(0~11)
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
年份(1970-2099)(可省略)
@Scheduled(cron = "0 0 20 * * ?")
public void loadAllRecords(){
//项目启动时自动加载,每天20:00更新一次
String key="lastestRecords";
if(RedisUtil.exists(key)) RedisUtil.del(key);
List<RecordInfo> records=getAllRecords();
String records_json= ObjectMapperUtil.toJSON(records);
RedisUtil.set(key,records_json);
}
更多推荐
已为社区贡献3条内容
所有评论(0)