首页 / 邮件 / 模拟登陆图书馆自动发邮件的程序优化思路
模拟登陆图书馆自动发邮件的程序优化思路
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了模拟登陆图书馆自动发邮件的程序优化思路,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2059字,纯文字阅读大概需要3分钟。
内容图文
用php CI框架(这个无所谓,主要是想问一下思路)写的一个检测图书馆书籍借阅时间,自动发送邮件的功能。流程
1、查询数据库
2、取得用户账号和密码,模拟登陆
3、抓取图书信息,取得用户所有图书到期时间,判断如果时间小于两天,发送邮件。
4、重复 2、3步骤,直到遍历完所有用户。
当用户人数达到3万时,程序会不会不崩掉,应该怎么优化。想问一下,优化的思路。
public function email()
{
$data = $this->lib_model->M_getUserAndEmail();//取得用户账户
foreach ($data as $keys){
$bookData = $this->imitateLogin($keys['sdutnum'],$keys['lib_pwd']);//模拟登陆
for($i=1;$i<=$bookData['bookNum'];$i++) //遍历用户所有图书
{
$returnTime = substr($bookData['bookArray']['0'][$i*8+4],65,-13);//获取还书时间
$day = floor((strtotime($returnTime) - strtotime(date('Y-m-d')))/86400); //计算图书距离归还的时间
$bookName = substr($bookData['bookArray']['0'][$i*8+1],111,-10);
$title = "山东理工图书到期提醒";
$content = $keys['sdutnum'].",您的".$bookName."将于".$returnTime."到期";/*add link about address in here.*/
if($day<=2){
$this->sendEmail($keys['email'],$title,$content); //发送邮件
echo "邮件发送完成";
}
}
}
}
回复内容:
用php CI框架(这个无所谓,主要是想问一下思路)写的一个检测图书馆书籍借阅时间,自动发送邮件的功能。
流程
1、查询数据库
2、取得用户账号和密码,模拟登陆
3、抓取图书信息,取得用户所有图书到期时间,判断如果时间小于两天,发送邮件。
4、重复 2、3步骤,直到遍历完所有用户。
当用户人数达到3万时,程序会不会不崩掉,应该怎么优化。想问一下,优化的思路。
public function email()
{
$data = $this->lib_model->M_getUserAndEmail();//取得用户账户
foreach ($data as $keys){
$bookData = $this->imitateLogin($keys['sdutnum'],$keys['lib_pwd']);//模拟登陆
for($i=1;$i<=$bookData['bookNum'];$i++) //遍历用户所有图书
{
$returnTime = substr($bookData['bookArray']['0'][$i*8+4],65,-13);//获取还书时间
$day = floor((strtotime($returnTime) - strtotime(date('Y-m-d')))/86400); //计算图书距离归还的时间
$bookName = substr($bookData['bookArray']['0'][$i*8+1],111,-10);
$title = "山东理工图书到期提醒";
$content = $keys['sdutnum'].",您的".$bookName."将于".$returnTime."到期";/*add link about address in here.*/
if($day<=2){
$this->sendEmail($keys['email'],$title,$content); //发送邮件
echo "邮件发送完成";
}
}
}
}
不管你其他的业务,假设你现在有了用户信息,和其所借书籍归还时间
说下这块的优化.
先说你现在业务的缺点,你上面说遍历所有的数据,这是很不合适的数据一多,速度慢不说,而且效率很低,时间复杂度都是 O(n).
如果是我做,我会有两个脚本
一个脚本每3个小时搜集一次用户的借书信息,把用户邮箱,归还日期插入到 redis 的有序集合中, score 用日期
一个脚本每天凌晨跑一次,从 redis 有序集合中获取两天内要还书的用户数据,条件就是
score < time()+两天秒数
不会,用户量3W,实际上在两天内需要还书的并不会是3W,即使饱和来说3W来说,这个数据量也不大
你说的查询数据库获取用户密码,我不知道是图书馆方面找你做还是你自己做,如果是图书馆项目,你都能查数据库了,还要什么模拟登录。如果是自己做,首先你要想一想前两步能不能搞定。?
有数据库权限的话,完全没必要模拟登录
优化建议:
1、用户模拟登录:可以缓存COOKIE?
2、扫描优化:可以根据用户缓存图书信息吗?加快扫描速度?
3、邮件发送:可以使用异步方式吗?
内容总结
以上是互联网集市为您收集整理的模拟登陆图书馆自动发邮件的程序优化思路全部内容,希望文章能够帮你解决模拟登陆图书馆自动发邮件的程序优化思路所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。