zoukankan      html  css  js  c++  java
  • Redis实现消息队列

    原文作者: xingguang
    原文链接:https://www.tiance.club/post/4033908611.html

    队列本身其实是个有序的列表,而Redis是支持list的,可以利用redis的列表(List)来实现简单队列。

    一般有两种方式:
    1、LPUSH(头部插入)和RPOP(尾部弹出)
    2、RPUSH(尾部插入)和LPOP(头部弹出)
    两种均可,下面示例使用的是:第一种:LPUSH和RPOP。

    一般开发的时候我们会分为生产者和消费者,生产者生产消息,消费者获取消息进行处理。

    原文作者: xingguang
    原文链接:https://www.tiance.club/post/4033908611.html

    Producer: 
    redis->lpush(‘joblist’, ‘this is Job-1’); 
    redis->lpush(‘joblist’, ‘this is Job-2’); 
    …. 
    
    Cosumer: 
    job = redis->rpop(‘joblist’);// return Job-1 
    done the job…. 
    job = redis->rpop(‘joblist’);// return Job-2 
    done the job… 
    

    需要注意的是redis实现的消息队列功能本身存在一些缺陷,这也是redis本身的限制,一个重要的缺陷在于没有类似RabbitMQ那样成熟的ACK消息确认机制(虽然redis也可以通过代码层自己封装写个ack消息确认机制,但相对比较繁杂。一般常见的思路是POP时将pop出的数据放到备份的地方,当有ACK请求(确认消息被消耗)后将备份的信息删除掉;每次在pop前需要检查备份队列中有没有过期的数据没有ack的,如果有则PUSH到list中后再从list中POP出来。
    一般来说如果对数据没有极高要求的又不想搭建其他QM组件的话可以直接用redis的list功能实现,如果对数据幂等性、一致性有要求的话建议使用RabbitMQ(目前功能最完善的企业级MQ产品,虽然吞吐量不是最强的,但足以应付绝大多数公司的流量)或者不想自己搭建的话也可以直接使用第三方的消息队列产品,比如阿里云的消息队列,安全性能均有保障。

    原文作者: xingguang
    原文链接:https://www.tiance.club/post/4033908611.html

  • 相关阅读:
    你可能不知道的Linux/GNU bash sort多列排序功能
    设置字间距
    设置为灰度图
    点击短信中的url打开某个应用
    AchartEngine绘图引擎
    表格类似Excel
    自定义圆环progressbar
    高低版本方法兼容
    读取并创建excel文件(.xls)
    在android studio中导入github下载的工程
  • 原文地址:https://www.cnblogs.com/yizhidaozuihou/p/12829914.html
Copyright © 2011-2022 走看看