20.1 CRON定时任务

1.CRON

        CRON表达式是用于设置定时任务执行时间的一种字符串格式。在计算机中,CRON表达式通常用于指定任务在何时执行的规则。它由多个时间字段组成,用空格隔开,每个时间字段代表任务在一个时间维度上的执行规则。

秒(0-59) 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-7,其中0和7都表示星期日)

        其中,每个时间字段都可以是一个具体的值、一个范围、一个通配符(*),或者一个逗号分隔的列表。另外,还可以使用特殊字符来表示一些特殊的含义:

  • *:代表所有可能的值,例如在分钟字段使用*表示每分钟都执行。
  • /:用于指定增量步长,例如在小时字段使用0/2表示每隔2小时执行一次。
  • -:用于指定范围,例如在月份字段使用1-6表示1月到6月。
  • ,:用于指定多个值,例如在星期字段使用1,3,5表示周一、周三和周五。
  • ?:用于指定不关心的值,通常用于日期和星期字段,表示不指定具体的值。

以下是一些CRON表达式的示例:

  • 0 0 * * *:每天零点执行一次。
  • 0 0 12 * * ?:每天中午12点执行一次。
  • 0 0 8-18 * * MON-FRI:每个工作日上午8点到下午6点,每隔1小时执行一次。
  • 0 0/30 * * * ?:每隔30分钟执行一次。

        在Java中,通常可以使用Spring的@Scheduled注解来指定CRON表达式,从而实现定时任务的调度。

2.使用实例

@Slf4j
//开启定时任务
@EnableScheduling
@Component
public class KillJob {
    @Resource
    private KillService killService;
    @Resource
    private RedisTemplate redisTemplate;

    @Scheduled(cron = "0 0/30 * * * ?")
    private void init(){
        log.debug("初始化秒杀商品到redis");
        //查询秒杀活动商品
        List list = killService.partOfUse();
        //缓存预热
        for (Kill kill:list){
            redisTemplate.opsForList().leftPush("kill:goods",kill);
            for (int i = 0; i < kill.getNum(); i++) {
                //存储每个活动对应商品数量的商品id,处理超卖的问题
                redisTemplate.opsForList().leftPush("kill:num:"+kill.getId(),kill.getGid());
            }
        }
    }
}

你可能感兴趣的:(JavaEE,java,redis)