redis有序消息队列

将消息加入优先级的队列,将1,2替换为时间就是定时发送的队列了

1 $redis = new Redis();
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

如果你想让这些都运行在命令行下,可以参考下面来,当然这些是经过删减的

复制代码
 1 <?php
 2 while (true) {
 3         $pid = pcntl_fork();
 4         if ($pid == -1) {
 5             echo date('Y-m-d H:i:s') . "fork失败!\n";
 6         } else if ($pid == 0) {
 7             $redis = new Redis();
 8             $redis->connect('127.0.0.1', 6379);
 9             $redis->zRevRangeByScore('zset1', '+inf', '-inf', array('withscores'=>false, 'limit'=>array(0,20)));
10             exit;
11         } else {
12             pcntl_wait($status);
13         }
14 }        
复制代码

pcntl_fork是PHP中的生成子进程,当调用该函数时,会返回一个进程pid,当pid为0时表明是在子进程中,所以把要执行的东西全放这里

posted @ 2016-08-23 16:33  我寺神经病  阅读(445)  评论(0)    收藏  举报