• 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等接口

  • 相关阅读:
    CodeForces
    CodeForces
    Comet OJ
    CodeForces
    2019年第五届计蒜之道复赛总结
    2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)
    2019计蒜之道初赛3 D. 阿里巴巴协助征战SARS(困难)(大数取余+欧拉降幂)
    2018计蒜之道复赛 贝壳找房函数最值(贪心+优先队列)
    牛客想开了大赛2 A-【六】平面(切平面)
    2018年第九届蓝桥杯国赛试题(JavaA组)
  • 原文地址:https://www.cnblogs.com/xinzaiyuan/p/12195591.html
Copyright © 2020-2023  润新知