Nginx服务器定时任务
该功能是由于某支付客户方那边的发奖接口有每分钟2000次的调用次数限制,在极端的高并发情况下,有可能会出现发奖接口调用过于频繁而导致奖品没有办法发出的情况。所以使用Redis进行调用次数的限制的同时,配合定时任务进行未发奖的补发处理。
Reids控制部分
//连接redis
$redis = new \Redis();
$redis->connect('服务器地址', 端口号);
$redis->auth('密码配置'); //密码验证
//获取Redis信息
$ret = $redis->get('redis字段');
if($ret){
$ret = $redis->incr('redis字段');
}else{
//设置当前生命周期为60秒
$ret = $redis->set('redis字段', 1);
$redis->expire('redis字段',60);
}
PHP部分关键代码(由于外协采用的是原生mysqli链接处理,其他项目可以使用TP3.2.3的M方法):
PHP部分代码
public function index(){
// 链接数据库 选择数据库 开始执行定时任务发送
$connect = mysqli_connect('数据库地址','用户名','密码','数据库名') or die('Unale to connect');
//插入一条数据
$sql = "select * from getprize as t where t.is_send = 2 and t.phone > 0 and t.is_right = 1 limit 100";
// 执行sql语句返回结果集
$result = mysqli_query($connect,$sql);
$rowList = mysqli_fetch_all($result, MYSQLI_ASSOC);
if($rowList){
//处理发送[云闪付]对接接口
foreach($rowList as $key => $val){
$res = $this->couponsend($val['phone'],$ctype);
if($res['code'] == '0'){
$usql = "update getprize as t set t.is_send = 1 where t.phone =" . $val['phone'];
mysqli_query($connect,$usql);
}
}
}
//释放结果集
mysqli_free_result($result);
//关闭链接
mysqli_close($con);
}
##Nginx服务器配置
使用Xshell或其他服务器链接工具链接至服务器,使用 crontab -e 命令打开服务器定时任务管理.
总左至右:
minute:代表一小时内的第几分,范围 0-59。
hour:代表一天中的第几小时,范围 0-23。
mday:代表一个月中的第几天,范围 1-31。
month:代表一年中第几个月,范围 1-12。
wday:代表星期几,范围 0-7 (0及7都是星期天)。
bin/sh 是指运行 脚本的命令。
command:所要执行脚本路径。
例如 */1 * * * * wget http://www.baidu.com/Bg/Ysfcli/index
含义为: ,每一分钟通过wget方式调用 域名部分的接口功能.
配置完成后输入:wq退出 ,之后重启服务器定时任务服务即可.