场景设计:系统中有几万个任务需要在各自的特定时刻触发执行,怎么做? 1. 使用定时任务队列(如Redis的List或数据库表) - 将每个任务的执行时间和具体业务编码保存在队列中 - 有定时任务扫描队列,获取将要执行的任务 - 注册Cron作业定时扫描队列触发任务 2. 使用延迟队列(如Kafka、RabbitMQ) - 将(任务,执行时间)作为消息生产到队列 - 消费者订阅队列消息,判断时间是否到达后执行任务 3. Redis计数器+Sorted Set - 将(任务,执行时间)保存在Sorted Set - 注册服务保持查询Sorted Set,执行将到期的任务 - 使用计数器避免并发执行同一任务 4. 数据库交易表+定期扫描 - 表列存储(任务,执行时间) - 定期扫表(如每分钟)执行将到期的任务 - 加TXIsolation避免重复执行 5. 分布式作业调度系统 如Apache Storm/Spark网络拓扑,简化触发逻辑。