给你个思路:
成都创新互联公司长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为临渭区企业提供专业的网站制作、成都做网站,临渭区网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。
1、建一个php文件,文件里面写需要更新数据库的代码。
2、给服务器建立定时任务,liunx的话需要命令开启任务,详情都能网上搜。windows的话可以建立一个任务计划程序(开始菜单可以搜索),里面设置好启动时间及要通过php程序运行的php文件,详情也可以网上搜索出来。
3、另外附上一段php执行文件(也就是用此段代码执行你的数据库操作php文件)
?php
/**
* 定时计划任务
*/
$option = '';//附加参数
$header = '';//请求头
$type = 'GET';//请求类型
$url = '......';//请求地址
$curl = curl_init (); // 启动一个CURL会话
curl_setopt ( $curl, CURLOPT_URL, $url ); // 要访问的地址
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE ); // 对认证证书来源的检查
curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE ); // 从证书中检查SSL加密算法是否存在
curl_setopt ( $curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)' ); // 模拟用户使用的浏览器
if (! empty ( $option )) {
$option = json_encode ( $option );
curl_setopt ( $curl, CURLOPT_POSTFIELDS, $option ); // Post提交的数据包
}
curl_setopt ( $curl, CURLOPT_TIMEOUT, 30 ); // 设置超时限制防止死循环
//设置请求头
if($header){
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
}
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回
curl_setopt ( $curl, CURLOPT_CUSTOMREQUEST, $type );
$result = curl_exec ( $curl ); // 执行操作
curl_close ( $curl ); // 关闭CURL会话
PHP是没有自动提交的功能的。想要实现自动提交只能从系统入手。如果是WINDOWS系统可以使用计划任务。如果是linux系统可以使用crontab命令。实现每天固定时间访问某个网址某个php网址达到自动提交数据的目的。
以前我用过querylist插件抓数据,服务器写和定时器,每天固定时间去运行脚本。朝这个方式试试
高并发下数据的更新,应该 update table xxx set num = num - 1 的方式,这种方式可以保证数据的正确性。
但是会出现 num 为负数的问题,如果库存为负数,显然是不合理的。
于是,需要将 num 字段设置为 无符号整型,这样就不会出现负数了,因为,如果减到负数,就会更新失败。
但是这种依然会造成很多无用的更新语句的执行,是不合理的。
于是,update table xxx set num = num - 1 where num 0,
这样当 num 等于0之后就不会去更新数据库了,减少了很多无用的开销。
这种方式被称作“乐观锁”
此外,对于抢红包这种非整数的操作,我们应该转换为整数的操作。
关于抢购超卖的控制
一般抢购功能是一个相对于正常售卖系统来说独立的子系统,这样既可以防止抢购时的高并发影响到正常系统,
也可以做到针对于抢购业务的特殊处理。
在后台设计一些功能,可以就昂正常的商品加入到抢购活动中并编辑成为抢购商品,写入到抢购商品表,当然
也可以把抢购商品表写入redis而不是数据表。并且在原商品表写入一个同样的商品(id相同,用于订单查看,
此商品不可购买)
如果是数据表,为了控制超卖,需要对表进行行锁,更新的时候带上 where goods_amount 0。
如果是redis,使用 hincrby 一个负数来减库存,并且 hincrby 会返回改变后的值,再来判断返回值是否大于0,
因为redis每个命令都是原子性的,这样不用锁表就可控制超卖。
MYSQL 有事物功能,可以定时自动更新数据库。
但是经常,你根本就没有这个权限。
------------
一般的思路是这样,这件事,让php 去做,我们假设每天至少有一个用户访问你的网站,
那么就做一个判断,如果是 第一个用户,那么 就让 php 去更新一下,然后今天就不再更新。
这样的优点是很简单,方便,
缺点是第一个用户会稍微有一点点慢。
第一,使用IP限制的话,你只能获得对方用户的外网IP,那么网吧里面所有电脑的IP是相同的,一天之内这个网吧只有一台电脑可以提交。如果你的客户主要是家庭用户,那么可以使用IP限制,否则IP限制会把许多无辜的人限制了。
获得IP的方法:
$ip=getenv('REMOTE_ADDR');
IP限制还是可以破的,家庭宽带用户断往重新拨号,会得到新的IP。
再次确认,服务器无法获得192.1.1.100这样的内网IP地址的。
第二,除了IP之外,还可以使用COOKIE限制,在客户端的浏览器保存一个有效期一天的COOKIE,程序检测COOKIE进行限制。这个方法可以解决IP限制对网吧限制过严的问题,但是无法解决聪明的客户自己清除浏览器COOKIE的方法。
设置有效期一天的COOKIE的方法:
setcookie("TestCookie", $value, time()+24*3600);
以上两个方法都各有千秋,你可以结合起来做一个稍微更合理的,但是都不可能完美。