Redis的队列和消息队列的区别【concept】

Redis 队列

用redis作为队列效率高,而且简单易用

使用场景

  • 用于处理比较耗时的请求,例如批量发送邮件,如果直接在网触发执行发送,程序会出现耗时

  • 高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台去处理这些请求

  • 抢购场景,先入先出的模式

Redis 消息队列

主要应用在网络中实现异步任务,Reids可以充当消息队列实现两种模式:生产者 ->消费者,发布者->订阅者 第一种方式是一对一,后者是一对多

生产者/消费者模型

生产者模型需要存在生产者和消费者两方,而在redis中队列的存储和获取可以作为消息队列被生产者和消费者使用

生产者

redis 在其中做缓存的作用,将任放置到queue队列里面,其实redis有lpush和rpush,意思是从左边插入列队还是右边插入列队,这就是生产者部分,将任务插入指定的队列中。

消费者

简单的说就是拿出来(BRPOP,RPOP),队列是按顺序取任务的,一般是左边插入,右边取出,redis有BRPOP和RPOP,可以设置时间以秒为单位,如果队列是空的,那么先不返回,
等待一会(设置的时间【BRPOP queue 10】,等待10秒),如果在这期间有新的任务插入,那么就取出任务返回,还是没有的话,返回空。

  • 订阅/发布模型

订阅/发布模型简单来说是由发布者向订阅者发送任务,同样任何订阅者都可以获取任务。

发布者使用publish channel task 来发布相关的任务,而订阅者则是使用subscribe channel,这是一个监听命令,redis会一直监听这个channel,如果发布者发布新的任务,
监听命令会返回任务,直到订阅者主动退出监听,但是redis也可以为这个设置超时,保证监听的有效性,默认如果60秒内没收到信息就异常退出,当然了这个可以配置。

Redis队列功能介绍

常用命令:

  • Blpop删除,并获得该列表中的第一元素,或阻塞,直到有一个可用

  • Brpop删除,并获得该列表中的最后一个元素,或阻塞,直到有一个可用

  • Brpoplpush

  • Lindex获取一个元素,通过其索引列表

  • Linsert在列表中的另一个元素之前或之后插入一个元素

  • Llen获得队列(List)的长度

  • Lpop从队列的左边出队一个元素

  • Lpush从队列的左边入队一个或多个元素

  • Lpushx当队列存在时,从队到左边入队一个元素

  • Lrange从列表中获取指定返回的元素

  • Lrem从列表中删除元素

  • Lset设置队列里面一个元素的值

  • Ltrim修剪到指定范围内的清单

  • Rpop从队列的右边出队一个元素

  • Rpoplpush删除列表中的最后一个元素,将其追加到另一个列表

  • Rpush从队列的右边入队一个元素

  • Rpushx从队列的右边入队一个元素,仅队列存在时有效

  • Redis支持php、python、c等接口

上一篇:How to Read a Paper


下一篇:REST core concept