• php+redis简易消息队列


    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,显示如下:

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

  • 相关阅读:
    iOS CALayer 学习(2)
    iOS CALayer 学习(1)
    iOS 绘画学习(5)
    iOS 绘画学习(4)
    果冻视图制作教程
    15个名不见经传的Unix命令
    WEB服务器2--IIS架构(转)
    WEB服务器1--开篇
    HTTP协议5之代理--转
    HTTP协议4之缓存--转
  • 原文地址:https://www.cnblogs.com/yqzc/p/12539084.html
Copyright © 2020-2023  润新知