关于3天后自动收货的功能怎么实现?新手求问,我也在度娘,也在测试,如果大家有空,也请讲讲你们的思路。

szuzsq 2018-05-04 08:28:26
如题。
我的系统是CentOS7.2,64位,阿里云。
我度娘的是用linux定时任务+redis。
1、php用在apache上访问mysql,和用在crontab上,用在php cli上访问mysql是否一致?我之前代码是PDO的,config如下:

class Config {
public static $db_type = 'mysql'; //mysql, sqlite, oracle, sqlserver, pgsql, firebird, mongo
public static $db_host = 'localhost';
public static $db_port = 3306;
public static $db_charset = 'utf8';
public static $db_database = 'wxshaker';
public static $db_username = 'wxshaker';
public static $db_password = 'abc123';
}

不知道crontab能使用PDO吗?访问mysql也是localhost吗?

2、关于订单处理逻辑。我现在是有一个订单表,里面有状态、以及时间字段。
定时任务是直接操作这个订单表?例如:查看状态是否为已发货,并且时间已经过了,则自动收货。
还是不直接操作这个表(因为订单已经够忙了,下单、发货、退货等,都要搞这个表,定时任务再来插一腿?)还是建一个view或者另外建一个表。状态改变时,这个view或者表上同步要自动收货的订单。

3、网上讲到redis生产者、消费者,不太懂。

4、php响应时间默认好像是30秒?这个我不想改,30秒已经够了。
但是在crontab中,如果要处理很多订单时,30秒会不会短?我想的是这一个php脚本,不限时间,其他的按默认的30秒。

大家给出个主意,怎么将这功能弄得高效、强壮?
...全文
1191 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lylclz 2019-01-04
  • 打赏
  • 举报
回复
通用解决方案,消息写入延迟队列,到点回调通知,延迟队列开源实现可以参看这个:https://github.com/chenlinzhong/php-delayqueue
qq_39047451 2018-05-04
  • 打赏
  • 举报
回复
1、可以;随你 2、如果订单量大,加队列操作;如果不大加锁机制 3、往队列塞任务的就是生产者;执行任务就是消费者 4、脚本文件,可以在代码中设置超时时间和执行的内存(ini_set),执行时间超长的脚本,会导致内存溢出,需要及时unset掉变量
qq_39047451 2018-05-04
  • 打赏
  • 举报
回复
引用 2 楼 szuzsq 的回复:
[quote=引用 1 楼 qq_39047451 的回复:] 1、可以;随你 2、如果订单量大,加队列操作;如果不大加锁机制 3、往队列塞任务的就是生产者;执行任务就是消费者 4、脚本文件,可以在代码中设置超时时间和执行的内存(ini_set),执行时间超长的脚本,会导致内存溢出,需要及时unset掉变量
关于第3点,我理解是 设置2个设置2个定时任务:1个是批量把要操作的数据,添加到redis里面;每30分钟执行一次;一个是处理这个redis队列.每隔1秒执行一次?[/quote] 队列一般是作用在高并发的状况下的,你这样做和并发没什么关系。
szuzsq 2018-05-04
  • 打赏
  • 举报
回复
引用 1 楼 qq_39047451 的回复:
1、可以;随你 2、如果订单量大,加队列操作;如果不大加锁机制 3、往队列塞任务的就是生产者;执行任务就是消费者 4、脚本文件,可以在代码中设置超时时间和执行的内存(ini_set),执行时间超长的脚本,会导致内存溢出,需要及时unset掉变量
关于第3点,我理解是 设置2个设置2个定时任务:1个是批量把要操作的数据,添加到redis里面;每30分钟执行一次;一个是处理这个redis队列.每隔1秒执行一次?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧