发布网友 发布时间:2022-04-26 21:36
共1个回答
热心网友 时间:2022-04-11 15:11
思路:首先一个是将这两个分为两个队列来实现,一个用来实现消息优先级,一个来实现定时发送用的是redis的有序集合,用zadd添加时,将score比做是优先级,也可以用时间戳来当做score,用来表示时间PHP版本简易实现将消息加入优先级的队列,将1,2替换为时间就是定时发送的队列了1$redis=newRedis();2$redis->connect('127.0.0.1',6379);3$redis->zAdd('zset1',1,'message');4$redis->zAdd('zset1',2,'message2');从队列中取出数据1$redis->zRevRangeByScore('zset1,'+inf','-inf',array('withscores'=>false,'limit'=>array(0,20)));这条语句表示从zset1这个队列里按照score从最大(+inf)到最小(-inf)的排序中取出20条,不带score,如果想要从小到大可以用zRangeByScore如果你想让这些都运行在命令行下,可以参考下面来,当然这些是经过删减的1connect('127.0.0.1',6379);9$redis->zRevRangeByScore('zset1','+inf','-inf',array('withscores'=>false,'limit'=>array(0,20)));10exit;11}else{12pcntl_wait($status);13}14}pcntl_fork是PHP中的生成子进程,当调用该函数时,会返回一个进程pid,当pid为0时表明是在子进程中,所以把要执行的东西全放这里线上的一个项目,运行几个月了,用子进程方式还没有出过问题,也没挂过,相当不错