Redis实战系列(2) 使用List结构构造高效的队列系统

来源:互联网 发布:开拓者 交易软件 收费 编辑:程序博客网 时间:2024/05/18 00:34

Redis 提供了brpop blpop brpoplpush三个阻塞命令来监听一个List数据结构。下面是php脚本

server.php$redis = new Redis();$redis->connect('127.0.0.1');while(true){$data = $o->brpop(array('key1','key2'), 30);var_dump($data); //array('key1'=>'data1')}client.php$redis = new Redis();$redis->connect('127.0.0.1');for($i=0;$i<10000; $i++){$redis->lpush('key1','data'.$i);}

而使用brpoplpush可以构建一个可靠的队列,brpop将元素从list中弹出,如果没有处理完毕那这个事件就消失了,如果用brpoplpush,就可以讲正在处理的key弹出到另外一个list结构中,这样在进程处理完成时调用lrem来删除这个元素。php代码:

server.php$redis = new Redis();$redis->connect('127.0.0.1');while(true){$data = $o->brpoplpush('key1','key2'), 30);var_dump($data); //data1//some process$o->lrem($key2,$data);}client.php$redis = new Redis();$redis->connect('127.0.0.1');for($i=0;$i<10000; $i++){$redis->lpush('key1','data'.$i);}


最新的redis2.6版本中支持lua,而redis的作者也给出了一个用lua脚本来实现可靠队列的方法,链接:http://antirez.com/post/250


原创粉丝点击