• 针对Redis队列的理解,实例操作(转)


    原文:本文出自 “峰云,就她了。”  http://rfyiamcool.blog.51cto.com/1030776/1131271

    为什么要使用消息队列

    用我的话来说, 队列特点是先进先出,在任务调度时,有时候需要保证先进入的任务先执行,所以需要使用队列。

    下面这段话来自VMWare的网站,个人觉得关于消息队列的作用的概括简明扼要,遂摘录至此:

    现 代的互联网应用大量地使用了消息队列(Messaging)。消息队列不仅被用于系统内部组件之间的通信,同时也被用于系统跟其它服务之间的交互。消息队 列的使用可以增加系统的可扩展性、灵活性和用户体验。非基于消息队列的系统,其运行速度取决于系统中最慢的组件的速度(注:短板效应)。而基于消息队列可 以将系统中各组件解除耦合,这样系统就不再受最慢组件的束缚,各组件可以异步运行从而得以更快的速度完成各自的工作。

    【更新2012-6-28】

    刚知道原来虎扑网也使用了消息队列(RabbitMQ),来看看他们的观点:

    消息队列能够将业务逻辑解耦,调用方只需要下达命令而不用等待整个逻辑执行完毕。除此之外消息队列也可以抑制性能波峰的产生,在瞬时业务增长产生时保持性能曲线的平滑

    【更新2012-6-29】

    博文“使用django+celery+RabbitMQ实现异步执行”中展示了一个消息队列的典型应用:

    发 帖之后只需给队列发送一条消息, 告诉队列“我发帖子了”,然后把发帖的结果返回给用户。 这时另一个叫做worker的进程会取出这条消息并执行那100条INSERT查询。这样,推送通知的操作在后台异步执行, 用户就能立即看到发帖结果。更精彩的是,可以运行多个worker实现分布式,多繁重的任务都不在话下了。

     

    在ptyhon中,可以用下ztq,这个我没有用,对于我来说还是复杂点~  

    ZTQ:Z Task Queue

    https://github.com/everydo/ztq

     

    在php中的应用

     

     1     入队操作
     2 
     3     $redis = new Redis();
     4 
     5     $redis->connect('127.0.0.1',6379);
     6 
     7     while(True){
     8 
     9     try{
    10 
    11     $value = 'value_'.date('Y-m-d H:i:s');
    12 
    13     $redis->LPUSH('key1',$value);
    14 
    15     sleep(rand()%3);
    16 
    17     echo $value."
    ";
    18 
    19     }catch(Exception $e){
    20 
    21     echo $e->getMessage()."
    ";
    22 
    23     }
    24 
    25     }
    26 
    27     出队操作
    28 
    29     $redis = new Redis();
    30 
    31     $redis->pconnect('127.0.0.1',6379);
    32 
    33     while(True){
    34 
    35     try{
    36 
    37     echo $redis->LPOP('key1')."
    ";
    38 
    39     }catch(Exception $e){
    40 
    41     echo $e->getMessage()."
    ";
    42 
    43     }
    44 
    45     sleep(rand()%3);
    46 
    47     } 

    我的python应用

     1     入队列
     2 
     3     #!/usr/bin/env python  
     4 
     5     import time  
     6 
     7     from redis import Redis  
     8 
     9     redis = Redis(host='127.0.0.1', port=6379)  
    10 
    11     while True:  
    12 
    13     now = time.strftime("%Y/%m/%d %H:%M:%S")  
    14 
    15     redis.lpush('test_queue', now)  
    16 
    17     time.sleep(1)  
    #!/usr/bin/env python  
    
    import sys  
    
    from redis import Redis  
    
    redis = Redis(host='127.0.0.1', port=6379)  
    
    while True:  
    
    res = redis.rpop('test_queue')  
    
    if res == None:  
    
    pass  
    
    else:  
    
    print str(res) 
  • 相关阅读:
    redis持久化RDB与AOF
    oracle PL/SQL习题
    pl/sql中的三种循环
    转 Oracle Cursor用法总结
    Oracle与MySQL的SQL语句区别
    安装mysql 遇到最后一步卡死解决方案
    Oracle安装
    mysql安装
    sql语句的优先级
    MVC设计模式
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/3854424.html
Copyright © 2020-2023  润新知