zoukankan      html  css  js  c++  java
  • 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等接口

  • 相关阅读:
    大搬家--百度之星 (递推)
    Scrambled Polygon--poj2007(极角排序模板)
    Space Ant--poj1696(极角排序)
    A. Link/Cut Tree--cf614A ()
    Ultra-QuickSort--POJ2299(归并排序求逆序数对)
    An Easy Problem?!--
    C. The Two Routes---cf602C(Dij)
    java 中jar的使用
    两种方法解决tomcat的 Failed to initialize end point associated with ProtocolHandler ["http-apr-8080"]
    Ajax(6) Ajax向servlet请求数据库操作 并显示到当前页面 这个未经测试
  • 原文地址:https://www.cnblogs.com/xinzaiyuan/p/12195591.html
Copyright © 2011-2022 走看看