模拟登陆图书馆 自动发邮件的程序优化思路

WBOY
发布: 2016-06-06 20:10:51
原创
1076 人浏览过

用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;$isendEmail($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;$isendEmail($keys['email'],$title,$content); //发送邮件 echo "邮件发送完成"; } } } }
登录后复制
登录后复制

不管你其他的业务,假设你现在有了用户信息,和其所借书籍归还时间
说下这块的优化.
先说你现在业务的缺点,你上面说遍历所有的数据,这是很不合适的数据一多,速度慢不说,而且效率很低,时间复杂度都是 O(n).
如果是我做,我会有两个脚本
一个脚本每3个小时搜集一次用户的借书信息,把用户邮箱,归还日期插入到 redis 的有序集合中, score 用日期

一个脚本每天凌晨跑一次,从 redis 有序集合中获取两天内要还书的用户数据,条件就是

score 
登录后复制

不会,用户量3W,实际上在两天内需要还书的并不会是3W,即使饱和来说3W来说,这个数据量也不大

你说的查询数据库获取用户密码,我不知道是图书馆方面找你做还是你自己做,如果是图书馆项目,你都能查数据库了,还要什么模拟登录。如果是自己做,首先你要想一想前两步能不能搞定。?

有数据库权限的话,完全没必要模拟登录

优化建议:

1、用户模拟登录:可以缓存COOKIE?

2、扫描优化:可以根据用户缓存图书信息吗?加快扫描速度?

3、邮件发送:可以使用异步方式吗?

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!