用redis做消息队列


背景

需要开发app抢购的api,需要处理大量的请求,需要有高响应率,例如淘宝和京东的秒杀,会在一个时间点有大量的请求。


设计思路


首先用nginx做负载均衡,根据ip_hash分配请求到不同服务器上,默认前三台服务器能处理请求,其余自动抛弃请求。

每台服务器上都设置有消息队列。

api的作用就是接收请求,请求放到消息队列里,返回给客户端一个等待处理结果的消息。

然后服务器后台一直跑一个处理消息的程序,当消息队列不为空的时候,开始处理消息,处理完消息,返回一个处理结果给客户端。


用到的技术


nginx的负载均衡技术

redis消息队列技术

api接口可用php快速开发

后台程序可用python,java,lua,c等。


redis消息队列


消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式。利用redis这两种场景的消息队列都能够实现。

生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息;即对于每个消息只能被最多一个消费者拥有。

发布者订阅者模式:发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息;即正常情况下每个消费者收到的消息应该都是一样的。


首先redis的设计是用来做缓存的,但是由于它自身的某种特性使得他可以用来做消息队列。它有几个阻塞式的API可以使用,正是这些阻塞式的API让他有做消息队列的能力。
另外做消息队列的其他特性,例如FIFO也很容易实现,只需要一个List对象从头取数据,从尾部塞数据即可实现。
redis能做消息队列得益于它的list对象blpop brpop接口以及Pub/Sub(发布/订阅)的某些接口。他们都是阻塞版的,所以可以用来做消息队列。



更多参考

http://www.cnblogs.com/lhfcws/p/3732535.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值