现在有这样一个需求,就是后台发布商品,不是立即上架,而是设定一个时间,到时间自动上架!
我现在有两种想法。
第一种方法:后台发布商品时,把设定上架的时间转换为unix time,比如:1559192131
然后,再用zadd写入到redis中
$key = 'auto:publish';
$time = 1559192131;
$data = [
'goodsId' => 1,
'expire' => 1559195131,
];
$redis->zAdd($key, $time, json_encode($data));
然后,用swoole起一个定时任务
从zset中拿第一条数据,再对比时间是否达到自动发布的条件!
如果自动发布了,就把第一条删除!
第二种方法:就是直接向redis写入list数据
$redis->rPush($key, json_encode($data));
然后用swoole定时的去消费这个list
$data = $redis->lPop($key);
如果到了上架时间,就上架,如果没到,再把数据写到list中!
我感觉这两种方法都不是太好,大神们有没有更好的解决办法?
其实楼上答案我觉得都可以实现,但是你可以换思路,比如商品在加入数据库的时候就有个设置,例如,status = 1是正常发布的商品,status =2 是定时上线下线的商品,这个时候就要判断现在是不是可以展示的商品了,
sql 如
select * from goods where status =1
union all
select * from goods where status =2 and online_time >= XXXX and offline_time<XXX