定时执行任务:Redis CRON让你轻松搞定(rediscron)

定时执行任务是系统开发中必不可少的一项功能,其实定时任务也是一种调度,它可以实现周期性的任务执行,如执行数据库备份、定时发送邮件等。其他的开发框架中分别有不同的实现方式,但这里咱们说的是Redis CRON定时执行任务。

总的来说, Redis CRON 不但能实现定时任务, 还可以具备延迟任务的功能。它的实现原理是借助Redis的list类型实现的,一个list里存放了待执行的任务,然后每隔固定的时间,Redis CRON就会把list里面存放的任务取出来,进行执行。

下面我们看一下实现定时任务的具体步骤,首先需要有一个监听程序,负责定时取出Redis里面存放的任务列表,如代码:

 public static void main(String[] args) {
System.out.println("cron begin--------");
// 定义Redis连接
Jedis conn = new Jedis("localhost");
conn.select(3);
while (true) {
// 取出时间点大于'now'的任务
String args = conn.lindex("task_list", 0);
if (args != null && args.length() > 0) {
// 执行任务
System.out.println("do task:" + args);
conn.lrem("cron_list", 0, args);
}
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

另外,还有一个存放定时任务的任务列表,当需要添加定时任务的时候,只需要将任务详细存放进去即可,如代码:

// 将任务放入定时任务列表中
String args = "do something at " + System.currentTimeMillis();
Jedis conn
conn.lpush("cron_list",args);

当然,如果需要在将来某一时间执行任务,可以适当改动存放到Redis中的任务,比如可以将执行时间存放进任务列表,如代码:

// 将任务放入定时任务列表中 
String args = String.format("%d,%s",System.currentTimeMillis()+ 5*1000,"do something");
Jedis conn
conn.lpush("cron_list", args);

总结一下,Redis CRON定时执行任务把任务放入到Redis里面,然后通过监听程序不断查询期将任务取出执行即可。这也就是一个简单的Redis CRON实现定时任务的大体过程。

希望本文对大家有所帮助,在开发定时任务时,最好不要做太多复杂的业务逻辑,应该视情况将任务拆分小一些,这样有助于在分布式系统中的可用性、稳定性的提升!


数据运维技术 » 定时执行任务:Redis CRON让你轻松搞定(rediscron)