13.5 定时触发器

定时触发器可以处理周期性的事情,比如时报、日报、周报等通知提醒,也可以处理倒计时任务,比如节假日、纪念日以及你可以指定一个具体时间的倒计时任务,除此之外,定时触发器还可以用来周期性处理一些定时任务。比如定期清理一些不必要的数据,定期更新集合内的数据。

13.5.1 定时触发器使用说明

1、定时触发器的配置与部署

在使用定时触发器时,要注意在对某个云函数使用触发器前,首先要保证该云函数在小程序端可以调用成功。config.json配置文件的格式,数组最后一项不能有逗号,;配置文件里不能有注释等;Cron 表达式有七个必需字段,不能多也不能少。

云函数目录里的config.json文件可以用来配置权限和定时触发器,比如该云函数需要使用到订阅消息和内容安全两个权限,以及每5秒钟定时发送一次订阅消息,config.json的写法如下:

{ "permissions": { "openapi": [ "subscribeMessage.send", "security.imgSecCheck" ] }, "triggers": [ { "name": "tomylove", "type": "timer", "config": "*/5 * * * * * *" } ] }

务必要注意的是更新触发器文件上传触发器两个概念的不同。当我们在修改触发器配置文件config.json后,首先鼠标右键config.json选择“云函数增量上传:更新文件”,然后再右键config.json选择“上传触发器”。这里的“云函数增量上传:更新文件”是让云函数端的触发器文件更新;而“上传触发器”则是让触发器开始生效执行。不能在云函数端的触发器没有更新的情况下就“上传触发器”来执行定时触发,因为你的文件没有更新,执行的还是旧的触发器内容。

2、Cron表达式语法

下面展示了一些 Cron 表达式和相关含义的示例:

  • */5 * * * * * * 表示每5秒触发一次
  • 0 0 2 1 * * * 表示在每月的1日的凌晨2点触发
  • 0 15 10 * * MON-FRI * 表示在周一到周五每天上午10:15触发
  • 0 0 10,14,16 * * * * 表示在每天上午10点,下午2点,4点触发
  • 0 */30 9-17 * * * * 表示在每天上午9点到下午5点内每半小时触发
  • 0 0 12 * * WED * 表示在每个星期三中午12点触发

在 Cron 表达式中的“日”和“星期”字段同时指定值时,两者为“或”的关系,即两者的条件均生效。更多内容大家可以查看技术文档。

定时触发器的Cron语法没法实现每隔90秒钟或90分钟发送一次这样的效果。

13.5.2 用定时触发器调用云函数

建立汇总表,首先不用考虑分库分表,使用定时器定时去汇总。

13.5.3、定时器的应用

定时器的应用是非常广泛的

1、执行数据库的清理与维护

您可以根据用户行为修改实时数据库,使系统保持最新状态,并且整洁有序。例如,在基于实时数据库构建的聊天室应用中,您可以监控写入事件,并从用户的消息中擦除不当或亵渎性文字。 定期删除过期数据; 定期

2、密集型任务

开发者可以利用 Cloud Functions 分流无法在用户设备上运行的资源密集型工作,将这些会导致较高 CPU 或网络负载的工作交付给 Google Cloud 处理。例如,您可以编写一个函数来侦听图像上传到 Cloud Storage 的事件,将图像下载到运行该函数的实例,进行修改并将其上传回 Cloud Storage 中。修改操作可以包括调整图像大小、裁剪或转换图像。 提供的 ImageMagick 命令行工具可与 Cloud Functions 结合使用,令此工作得以简化。 定期删除不用的 Firebase 帐号。 自动审核上传的图像。 向用户发送批量电子邮件。 定期汇总数据。 处理尚未完成的工作队列。

Insert语句中,根据测试,批量一次插入1000条时效率最高,多于1000条时,要拆分,多次进行同样的插入,应该合并批量进行。注意query语句的长度要小于mysqld的参数 max_allowed_packet 查询条件中各种逻辑操作符性能顺序是and,or,in,因此在查询条件中应该尽量避免使用在大集合中使用in