能否把 Redis 当做消息队列来用呢?

这个问题并不是面试中经常会问到的问题,而是我在平时看一些大牛写的技术文章的时候看到的一个问题,这个问题引发了我强烈的思考,我感觉我想通了这个问题之后,对redis和kafka都有了一个全新的认识,感觉像发现了新大陆这种感觉。这其实是一个泛问题,如果一个人对redis和kafka都很了解,那回答这个问题绝对是侃侃而谈的。我这几天一直在思考这个问题,感觉已经将redis和kafka的这个脑图都给构建出来了。

在我看来,Redis 其实就是一个内存存储系统。我的理解就是 Redis 是一个可以用来存数据的系统,就这么简单。Redis 支持很多种数据结构,我的理解就是你的那些数据可以按照不同的结构存储在 Redis 中。比如 Redis 有 List 这种数据结构,那数据在 Redis 中就很有可能是排成一列这样子存放的。

所以这就引出了一个问题:既然 Redis 支持数据排成一列存放,那 Redis 可不可以用作消息队列呢?我听到最多的消息队列是 activemq、rabbitmq、rocketmq、kafka 这些,我基本没听说过 Redis 消息队列。

假如我们现在有一个最简单的 Redis 内存系统,那这个系统会有什么不足呢?首先 Redis 支持 List 这种数据结构,而 List 的底层实现是链表。按理来说,在头尾操作元素是很方便的事情,用作消息队列天然适配。但是,由于是链表,你在取消息的时候是直接把消息取出来的,取出来后,链表就会删除这个元素。万一现在有很多个消费者都想消费这条消息,本来这条消息是共享的,结果你直接自己消费了,其他消费者消费不了就很难受,而且万一你自己还消费不成功这条消息,想再从队列里取出来再消费一次,已经没机会了,你刚刚已经拿出来了,所以这样子是不行的。

所以后来才有了发布/订阅者模式,这种模式就可以完美的解决上述的问题。

其实,现在的 Redis 是有发布/订阅者模式的,但是其实还是有不足的地方,问题出在哪里?Redis 在关于数据不丢失问题做不到严格的保证。你想想,Redis 保证数据不丢失,也就是我们平时说的 Redis 数据持久化的时候,无非就是用 AOF日志 和 RDB内存快照,这两种方式都不能严格的保证数据不丢失,反而消息队列比如 kafka 这种,就使用 leader-follower 模式来严格的保证数据不丢失,而且 kafka 在生产者那里为了保证数据不丢失也做了处理,甚至在消费者那里,都考虑到关闭offset 这个参数,这种对数据不丢失的严谨性是 Redis 比不了的。

当然,这也很正常,毕竟 Redis其实都不是很在乎数据丢不丢,因为 Redis 用的最多的就是做缓存,丢一点数据其实对整体没有什么大的影响。不仅是保证不了消息不丢,在保证消息不被重复消费,保证消息被有序消费这些点上,Redis 都无能为力。

当然,我这里说的 Redis 是早期的 Redis,现在的 Redis 肯定不是这样子的。比如说在保证数据不丢这点,Redis 现在已经做的很好了,它采用了主从复制+哨兵选举的方式,感觉和 kafka 保证数据不丢的思路是有点相似的。此外,它还用了分片集群,通过分片集群,Redis 就可以轻松的进行横向扩展,处理更大规模的数据了。

上面就是我自己对于这个问题的理解。因为这是一个开放性的问题,所以不同的人都会有自己不同的理解。当然,假如你对 Redis 和 kafka 掌握的越好,那你回答这道题就越能侃侃而谈,甚至通过这道题把你懂得的所有 Redis 和 kafka 的细节都说出来。我觉得我应该多思考这种开放性的问题,研究这种问题感觉是有利于促进对知识点的理解的。这种问题也有利于检测对一个知识点的理解到底掌握到哪种程度。复习的时候,也可以用这个问题当做复习,就是问你这道题,你把你懂的关于 Redis 和 kafka 的所有知识点都讲出来。

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

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

相关文章

简明 Python 教程(第6章 模块)

模块是Python中组织代码的一种方式,它允许开发者将代码分解为可重用的单元,便于管理和维护。开发者可以有效地利用Python的模块系统来构建复杂的应用程序。模块是一个包含Python定义和声明的文件,文件名就是模块名加上.py扩展名。模块可以包含…

python的数据容器通用操作

常用方法 len统计个数 max最大元素 min最小元素 my_list[1,2,3,4,5] my_tuple(1,2,3,4,5) my_str"abcdefg" my_set{1,2,3,4,5} my_dict{"key1":1,"kye2":2,"key3":3,"key4":4,"key5":5}print(f"列表 元素个…

[Netty实践] 请求响应同步实现

目录 一、介绍 二、依赖引入 三、公共部分实现 四、server端实现 五、client端实现 六、测试 一、介绍 本片文章将实现请求响应同步,什么是请求响应同步呢?就是当我们发起一个请求时,希望能够在一定时间内同步(线程阻塞&am…

FPGA高端项目:解码索尼IMX327 MIPI相机转HDMI输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存HDMI输出工程源码架构 6、工程源码…

Java中SPI机制简单演示

Java中SPI机制简单演示 写一个SpiService接口 public interface SpiService {void run();}写两个实现类,注意:实现类可以跨包 Slf4j public class SpiServiceImpl1 implements SpiService {Overridepublic void run() {log.warn("SpiServiceImpl…

简单破除github的2FA验证

简单破除github的2FA验证 文章目录 简单破除github的2FA验证👨‍🏫Authenticator工具 👨‍🏫Authenticator工具 最近使用github的时候发现要搞一个2FA的验证才可以 验证的途径有两种:一种是用手机电话验证,…

使用easyYapi生成文档

easyYapi生成文档 背景1.安装配置1.1 介绍1.2 安装1.3 配置1.3.1 Export Postman1.3.2 Export Yapi1.3.3 Export Markdown1.3.4 Export Api1.3.6 常见问题补充 2. java注释规范2.1 接口注释规范2.2 出入参注释规范 3. 特定化支持3.1 必填校验3.2 忽略导出3.3 返回不一致3.4 设置…

关于JavaScript常用命令

JS(JavaScript)是一种用于构建交互式网页的脚本语言,常用于前端开发。以下是一些常用的JS命令及其简要说明,希望能够帮助您更好地了解JS的基础知识。 1. **变量声明与赋值** - var, let, const: 用于声明变量,var在…

第二证券|高速连接概念再度活跃,沃尔核材5日涨近60%,胜蓝股份等走高

高速连接概念26日盘中再度走强,到发稿,胜蓝股份涨超13%,沃尔核材涨停,华丰科技、奥飞数据涨超5%。 值得注意的是,沃尔核材近5个交易日已收成4个涨停板,累计大涨近60%。公司近来在投资者互动平台表示&#…

Disruptor消费线程等待策略

以下按等待最快到最慢策略排序 BusySpinWaitStrategy BusySpinWaitStrategy相当于while(true)不停的轮询,跑动起来会迅速把CPU打满,适合延迟要求苛刻的业务场景,但是缺点是非常吃CPU YieldingWaitStrategy 轮询完成使用yield函数让出CPU资…

宽光谱SOA光芯片设计(一)

-本文翻译自由Geoff H. Darling于2003年撰写的文章。尽管文章较早,但可以了解一些SOA底层原理,并可看到早期SOA研究的思路和过程,于今仍有很高借鉴价值。 摘要 本文介绍一种新型宽光谱半导体光放大器(SOA)技术&#x…

【数据分享】中国土壤有机质数据集(免费获取)

中国土壤有机质数据集对于农业、生态环境保护等领域具有重要意义。通过对土壤有机质等多项指标的统计和分析,可以更好地了解土壤的特性,指导合理的土壤管理和保护措施的制定,从而促进农业生产的可持续发展,并为生态环境保护提供科…

数据结构与算法之美学习笔记:《数据结构与算法之美》学习指导手册

目录 前言 前言 本节课程思维导图: 在设计专栏内容的时候,为了兼顾不同基础的同学,我在内容上做到了难易结合,既有简单的数组、链表、栈、队列这些基础内容,也有红黑树、BM、KMP 这些难度较大的算法。但是,…

利用云手机高效运营多个海外社媒账户

随着全球化进程的不断推进,中国出海企业和B2B外贸企业日益重视海外社媒营销,将其视为抢占市场份额的关键策略。在海外社媒营销中,企业通常会在多个平台上批量开通账户,搭建自己的社媒内容矩阵。本文将会介绍如何用云手机高效运营多…

格雷希尔G25F系列快速接头,在新能源电池包气密性测试时的各种电气接插件的应用

一些大的新能源电池制造商如:比亚迪、宁德时代、国轩高科、亿纬锂能、东方时代等,在全球的新能源电池市场上占据着重要的地位。新能源PACK电池包在生产时,需要经过一些严苛的测试,用以检测产品的品质是否达到合格标准,…

基于React的低代码平台开发实践

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉在线地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

宝塔设置限制ip后,ip改了之后 ,登陆不上了

前言 今天作死,在宝塔面板设置界面,将访问面板的ip地址限制成只有自己电脑的ip才能访问,修改之后直接人傻了,“403 forbidden”。吓得我直接网上一通搜索,还好,解决方法非常简单。 解决方法 打开ssh客户…

探索AI大模型学习:挖掘技术的无限可能

标题: 探索AI大模型学习:挖掘技术的无限可能 在当今技术环境中,AI大模型学习已成为研究者和工程师们的热门话题。不仅需要深厚的数学基础和编程能力,还需要对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法&#xf…

skimage求凸包、包络

给一幅分割 label,求某个物体的凸包(convex hull)[1]和包络(polygon)[2],所得是一幅 0/1 的 mask。凸包、包络都是包含物体的,分别在于包络不要求凸,可以更细致地勾勒物体形状。例&a…

【OpenModelica】4命令行大全

命令行大全 文章目录 命令行大全一、Summary of Commands for the Interactive Session Handler二、Running the compiler from command line 一、Summary of Commands for the Interactive Session Handler 以下是交互式会话处理器中当前可用命令的完整列表。 • simulate(mo…