我们弄过微信或者支付宝的文档,都会涉及异步推送接口,当失败的时候,他们接口间隔多长时间再推送一次,直到24小时后不再推送。大家好奇他们是怎么做。注意:第一次触发不需要定时任务的,只是失败之后,后面的推送交给队列处理。
案例、一般情况下,25 小时以内完成 8 次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);
把上面兑换 秒数 4*60s ,10*60s .........
方式1、crontab定时任务执行 + redis队列
假设 crontab 定时 5s 执行一次
推送失败后,就把下次要执行的时间存起来,
$redis->get($key);
若是存在,证明还不到要执行的时间,跳过;否则执行,
$redis->lpop($key)
,执行成功 一般返回 success,接收到后,就
$redis->delete($key);
还是失败,就把一下要执行的时间再存起来
$redis->setex($key,setex,4*60);
同时把数据放回队列
$redis->lpush();
当$key 大于某个值,就证明的已经执行了最后一次了,若是还是失败,不需要保存下一次的执行的数据了
set 或者setex
这两者的区别,百度一下就知道。