码迷,mamicode.com
首页 > Web开发 > 详细

php+redis简易消息队列

时间:2020-03-21 16:40:32      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:server   就是   predis   alt   数据类型   mamicode   优先级   集合   cer   

Redis中的List数据类型可以作为一个简易的消息队列来使用,为什么说是简易的队列,因为List能实现队列基本的先进先出功能,但是比如延迟队列,消息优先级等功能并不支持,当然延迟队列也可以使用Redis的有序集合来实现,这里不过多介绍,只介绍一下php使用List实现最基本的先入先出队列功能。

前提条件

php中要使用redis的功能,建议使用扩展方式操作,例如使用较多的phpredis,也可以不安装扩展,使用predis包操作。

生产者

生产者就是往List里添加数据,这里测试添加50条数据。
producer.php

<?php
header("Content-type:text/html;charset=utf-8");
$redis = new \Redis();
$res = $redis->connect('127.0.0.1', 6379 );
if($redis){
    //redis key
    $queue_name="test_queue";
    //插入测试数据50条
    for($i=1;$i<=50;$i++){
       $redis->lPush($queue_name,$i);
       echo 'add data:'.$i.''.PHP_EOL;
    }
}else{
    echo "connect Redis server failed";
}

消费者

消费者即为从List中按先后顺序获取数据。
consumer.php

<?php
header("Content-type:text/html;charset=utf-8");
$redis = new \Redis();
$res=$redis->pconnect('127.0.0.1',6379);
if($res){
    $queue_name="test_queue";
    while(true){
        $data = $redis->rpop($queue_name);
        if($data){
            echo 'get data:'.$data.''.PHP_EOL;
        }else{
            sleep(1);
        }
    } 
}else{
    echo "connect Redis server failed";
}

测试

先执行producer.php,显示如下:
技术图片

执行consumer.php,显示如下:
技术图片

可以看到获取到数据顺序是先入先出,实现了简易的消息队列。

php+redis简易消息队列

标签:server   就是   predis   alt   数据类型   mamicode   优先级   集合   cer   

原文地址:https://www.cnblogs.com/yqzc/p/12539084.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!