如何保证 Redis 消息队列中的数据不丢失?

Redis 最常见的业务场景就是缓存读取与存储,而随着时间的推移,有人开始将它作为消息队列来使用了,并且随着 Redis 版本的发展,在 Redis.2.0.0 中新增了发布订阅模式(Pub/Sub)代表着官方开始正式支持消息队列的功能了,直到今天为止还有部分公司在实现轻量级的消息队列时,依然会选择使用 Redis 来实现。并且消息队列的知识点也会作为一个进阶型的面试题经常出现在面试当中。

我们本文的面试题是,什么是消息队列?为什么要用消息队列?Redis 实现消息队列的方式有几种?如何保证 Redis 消息队列中的数据不丢失?

典型回答

消息队列(Message Queue)是一种进程间通信或同一进程的不同线程间的通信方式,它的实现流程是一方会将消息存储在队列中,而另一方则从队列中读取相应的消息,消息队列提供了异步的通信协议,也就是说消息的发送者和接收者无需同时与消息队列进行交互。

消息队列中有几个重要的概念:

  • 生产者:是指发布消息的一方;
  • 消费者:接收消息的一方,也叫订阅者或订阅方;
  • 通道(channel):也叫频道,它可以理解为某个消息队列的名称,首先消费者先要订阅某个 channel,然后当生产者把消息发送到这个 channel 中时,消费者就可以正常接收到消息了。

它们的执行流程如下图所示: image.png 使用消息队列有如下好处:

  • 削峰填谷:将某一个时刻急

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9款基于CSS3 Transitions实现的鼠标经过图标悬停特效

之前给大家分享了很多css3实现的按钮特效。今天给大家分享9款基于CSS3 Transitions实现的鼠标经过图标悬停特效。这款特效适用浏览器:360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗. 不支持IE8及以下浏览器。效果图如下: 在线预览 源码下…

Redis 如何实现分布式锁?

锁是多线程编程中的一个重要概念,它是保证多线程并发时顺利执行的关键。我们通常所说的“锁”是指程序中的锁,也就是单机锁,例如 Java 中的 Lock 和 ReadWriteLock 等,而所谓的分布式锁是指可以使用在多机集群环境中的锁。 我们本文的面试题是,使用 Redis 如何实现分布式…

第二章关系数据库

第二章关系数据库2.1 关系模型概述(略)2.2 关系操作2.2.1_基本关系操作2.2.2_关系数据库语言的分类2.3 关系的完整性2.3.1_关系的三类完整性约束2.3.2_实体完整性2.3.3_参照完整性2.3.4_用户定义的完整性2.4 关系代数2.4.1_传统的集合运算2.4.2_专门的关…

线程----Monitor(互斥锁)类设置超时值

Monitor类与Lock语句相比,Monitor类的主要优点是:可以添加一个等待被锁定的超时值。缺点:开销非常大using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.T…

第三章关系数据库标准语言SQL

第三章关系数据库标准语言SQL3.1_SQL的特点3.3_数据定义3.3.1_基本表的定义、删除与修改3.3.3_索引的建立与删除3.4_数据查询3.4.1_查询时消除重复行3.4.2_涉及空值的查询3.4.3_BETWEEN AND的使用3.4.4_字符匹配3.4.5_聚集函数3.5_数据更新3.5.1_插入数据3.5.2_修改数据3.5.3_删…

使用 Redis 如何实现延迟队列?

延迟消息队列在我们的日常工作中经常会被用到,比如支付系统中超过 30 分钟未支付的订单,将会被取消,这样就可以保证此商品库存可以释放给其他人购买,还有外卖系统如果商家超过 5 分钟未接单的订单,将会被自动取消&…

第五章数据库完整性

第五章数据库完整性5.1_数据库完整性概述5.2_实体完整性5.2_参照完整性5.3_用户定义的完整性5.1_数据库完整性概述 1.数据库的完整性: 数据的正确性和相容性 2.数据的完整性和安全性的区别: 数据的完整性:防止数据库中存在不符合语义的数据&a…

KVC/KVO实现原理分析

2019独角兽企业重金招聘Python工程师标准>>> 1. 函数调用(消息)实现分析: 我们看这条语句: [代码]c#/cpp/oc代码: 1 [self.person setValue:"Vincent"forKey:"name"]; 就会被编译器…

小白学算法:买卖股票的最佳时机!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)本文已收录至 Github《小白学算法》系列:https://github.com/vipstone/algorith今天蚂蚁集团(支付宝…

《APUE》第6章笔记

这一章主要介绍了口令文件和组文件的结构和一些围绕这些结构的函数。 口令文件即passwd就是在/etc/passwd中可以查阅。其结构是: 上图四个平台能支持的就用黑点表示。 因为加密口令这一项放在passwd这个人人可读的文件中,可能会有安全问题。所以现在的Li…

聊聊近期的感受和10月文章精选!

先来看本月的原创文章汇总,其中算法部分也有少量 9 月份的文章,这样汇总起来大家看起来更方便,目录如下。算法系列小白学算法第1篇:一文详解「栈」和手撸栈的两种方法!小白学算法第2篇:JDK 竟然是这样实现栈…

第六章关系数据理论

第六章关系数据理论6.1_问题的提出(略)6.2_规范化6.2.1_函数依赖6.2.2_码6.2.3_范式6.2.4_2NF6.2.5_3NF6.2.6_BCNF6.2.7_多值依赖6.2.8_4NF6.2.9_规范化小结6.3_Armstrong公理系统6.3.1_函数依赖闭包6.3.2_最小依赖集6.3.3_转换为3NF的保持函数依赖的分解…

Github上的热门iOS开源项目:AFNetworking、MagicalRecord、BlocksKit以及XVim

1. AFNetworking AFNetworking是一个非常受欢迎的轻量级的iOS、Mac OS X网络通信类库。它建立在NSURLConnection、NSOperation以及其技术的基础上,有着精心设计的模块结构和功能丰富的API,让很多网络通信功能的实现变得十分简单。 附件:/c…

队列实现栈的3种方法,全都击败了100%的用户!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)本文已收录至 Github《小白学算法》系列:https://github.com/vipstone/algorith之前我们讲过《用两个栈实现一个…

where、having、group by、order by、count的使用注意

where、having、group by、order by、count的使用注意1_where、having、group by、order by的顺序2_group by的作用3_where和group by的组合4_group by和having的组合5_where、having、group by的组合使用6_count与group by的组合使用1_where、having、group by、order by的顺序…

很实用的21个SQL小技巧!

前言每一个好习惯都是一笔财富,本文基于MySQL,分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~1. 写完SQL先explain查看执行计划(SQL性能优化…

阿里最喜欢问的多线程顺序打印的5种解法!

Keeper导读大家在换工作面试中,除了一些常规算法题,还会遇到各种需要手写的题目,所以打算总结出来,给大家个参考。全文 2929 字,剩下的是代码,P6 及以下阅读只需要 8 分钟,高 P 请直接关闭第一篇…

CSS入门

CSS入门1_CSS概要1.1_CSS引入方式2_CSS选择器3_字体样式3.1_字体属性3.2_字体类型:font-family3.3_字体大小:font-size3.4_字体粗细:font-weight3.5_字体颜色:color3.6_总结4_文本样式4.1_文本样式属性4.2_首行缩进:te…

23张图!万字详解「链表」,从小白到大佬!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)链表和数组是数据类型中两个重要又常用的基础数据类型。数组是连续存储在内存中的数据结构,因此它的优势是可以通…

何为“秒传”

写在前面 最近一直在弄文件传输的组件,在讨论组里面,有同事提到“秒传”的功能。在目前的通信软件中也有网盘的功能,就从网上搜了一下,这里对“秒传”的实现思路做一下总结,在之后会写一个小的demo实现一下。没有其他&…