原文:本文出自 “峰云,就她了。”  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中的应用

     入队操作

     $redis = new Redis();

     $redis->connect('127.0.0.1',6379);

     while(True){

     try{

     $value = 'value_'.date('Y-m-d H:i:s');

     $redis->LPUSH('key1',$value);

     sleep(rand()%3);

     echo $value."\n";

     }catch(Exception $e){

     echo $e->getMessage()."\n";

     }

     }

     出队操作

     $redis = new Redis();

     $redis->pconnect('127.0.0.1',6379);

     while(True){

     try{

     echo $redis->LPOP('key1')."\n";

     }catch(Exception $e){

     echo $e->getMessage()."\n";

     }

     sleep(rand()%3);

     } 

我的python应用

     入队列

     #!/usr/bin/env python  

     import time  

     from redis import Redis  

     redis = Redis(host='127.0.0.1', port=6379)  

     while True:  

     now = time.strftime("%Y/%m/%d %H:%M:%S")  

     redis.lpush('test_queue', now)  

     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队列的理解,实例操作(转)的更多相关文章

  1. RedisPool操作Redis,工具类实例

    redis.properties 配置文件内容 redis.pool.maxActive=100redis.pool.maxIdle=20redis.pool.maxWait=3000redis.po ...

  2. php redis队列操作

    php redis队列操作 rpush/rpushx 有序列表操作,从队列后插入元素:lpush/lpushx 和 rpush/rpushx 的区别是插入到队列的头部,同上,'x'含义是只对已存在的 ...

  3. python通过连接池连接redis,操作redis队列

    在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...

  4. [Sqlite]-->嵌入式数据库事务理解以及实例操作

    引子: 1. Sqlite在Windows.Linux 和 Mac OS X 上的安装过程 2,嵌入式数据库的安装.建库.建表.更新表结构以及数据导入导出等等具体过程记录 SQLite 事务(Tran ...

  5. redis队列及多线程应用

    由于xxx平台上自己的博客已经很久没更新了,一直以来都是用的印象笔记来做工作中知识的积累存根,不知不觉印象笔记里已经有了四.五百遍文章.为了从新开始能与广大攻城狮共同提高技术能力与水平,随决心另起炉灶 ...

  6. .NET 环境中使用RabbitMQ RabbitMQ与Redis队列对比 RabbitMQ入门与使用篇

    .NET 环境中使用RabbitMQ   在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的 ...

  7. redis 单线程的理解

    单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程.其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会 ...

  8. Redis常用命令代码实例集合

    //连接本地的 Redis 服务 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth('12345 ...

  9. (3)redis队列功能

    Redis队列功能介绍 List 常用命令: Blpop删除,并获得该列表中的第一元素,或阻塞,直到有一个可用 Brpop删除,并获得该列表中的最后一个元素,或阻塞,直到有一个可用 Brpoplpus ...

随机推荐

  1. Unity3D-光照贴图技术

    概念 Lightmapping光照贴图技术是一种增强静态场景光照效果的技术,其优点是可以通过较少的性能消耗使静态场景看上去更加真实,丰富,更加具有立体感:缺点是不能用来实时地处理动态光照.当游戏场景包 ...

  2. 【Java面试题】4 静态变量和实例变量的区别?详细解析

    在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加.在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变 ...

  3. 用MathType怎么编辑带圈数字序号

    在用MathType编辑公式时,涉及到的数学公式与符号这些都能编辑出来,只要你能够细心一点找到它们相应的模板,不管是在word公式编辑器MathType工具栏模板中,还是在插入符号之后的面板中都可以. ...

  4. Environment.GetEnvironmentVariable

    参考: https://jingyan.baidu.com/article/b24f6c82cba6dc86bfe5da9f.html https://msdn.microsoft.com/zh-cn ...

  5. day7_直播_网络编程篇(元昊老师著)

    网络编程篇计算机网络: 多台独立的计算机用网络通信设备连接起来的网络.实现资源共享和数据传递. 比如,我们之前的学过的知识可以将D盘的一个文件传到C盘,但如果你想从你的电脑传一个文件到我的电脑上目前是 ...

  6. RF常用快捷键

    转自:http://www.robotframework.net/article/47 重命名——>F2 搜索关键字——>F5 执行用例——>F8 创建新工程——>ctrl+n ...

  7. 用gcc编译成可执行程序 (转)

    #gcc hello.c 该命令将hello.c直接生成最终二进制可执行程序a.out 这条命令隐含执行了(1)预处理.(2)汇编.(3)编译并(4)链接形成最终的二进制可执行程序.这里未指定输出文件 ...

  8. Android 在界面中显示以及输入文本信息 TextView和EditText

    Android控件之TextView和EditTextTextView:显示文本框控件EditText:输入文本框TextView和EditText的常用属性TextView控件的常用属性androi ...

  9. mysql使用笔记(一)

    一.安装 使用免安装的版本进行安装: 1. 解压到安装目录 2. 拷贝目录下的 my-default.ini 文件为 my.ini 文件 3. 修改my.ini 文件内容为 [client] port ...

  10. centos7 ubuntu14 添加sudo 权限 ,禁用每次sudo 需要输入密码

    安装完centos7后,默认没有启用sudo,首先应该是对sudo进行设置.sudo的作用就是使当前非root用户在使用没有权限的命令 时,直接在命令前加入sudo,在输入自己当前用户的密码就可以完成 ...