2025.2.18 学习
2025.2.18 学习
消息队列RocketMQ
主要结构:
producer:
生产者,消息的发送者,将消息发送给Broker
producer group:
生产者组
nameSrv:
名字服务,是一个路由注册中心,Broker会定时把自己的信息比如IP地址传给它,这样消费者和生产者就可以从nameSrv上获取这些信息,这样才能顺利的发送和接收消息
Broker:
消息中转站,负责消息的存储,投递,查询
customer:
消费者
消息队列的两种设计模式
队列模式和发布-订阅模式
队列模式就是消息从前到后排成一队,前面的消息被消费后就由后面的消息顶上,但是这样设计后每个消息只能被消费一次,如果需要一个消息被多个消费者消费就要为每个消费者都复制一份消息队列供其消费,显然这样非常占用空间效率也不算高。接下来着重说一下发布-订阅模式
发布订阅模式想要实现的功能是:比如我往 Topic-LOL 这个主题发布消息,那么订阅了这个主题的消费者都能收到这个消息,我往 Topic-DOTA 这个主题发布消息,那么订阅了 DOTA 主题的消费者都能收到 DOTA 相关的消息。实现的方法是:维护每个消费者已经消费到的位置,每当消费者消费一条消息,位置就+1。
消费者消费一条消息的流程:
先根据consumerOffset找到consumerQueue中对应的位置,然后根据其偏移量commitlogOffset和长度size去commitlog中找到消息,然后消费消息。
存储:
消息的存储,首先考虑数据库,存储和访问数据都比较慢,不符合消息队列的需求。用redis则增加了系统的复杂性,所以采用存储到硬盘的方式来存储消息,并且全部消息写到一个commitlog文件中,这样可以减少硬盘读写的寻道时间和旋转时间,达到顺序写。
八股
复习一下redis的八股
Mysql的一些八股:
聚簇索引,非聚簇索引,覆盖索引,回表,深分页优化,慢sql排查。
覆盖索引:sql语句用上了索引并且可以直接得到所有所需数据,不需要得到主键后再去聚簇索引找整行的数据补全,减少了一次回表过程效率高。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构