0%

redis线程IO模型

概述

Redis服务器是一个单线程事件驱动程序,服务器需要处理以下两类事件:

  1. 文件事件,服务器与客户端通信,会产生相应的文件事件。
  2. 事件事件,服务器一些操作需要在给定时间执行。
阅读全文 »

redis数据库

概述

redis数据库底层是用字典实现的,一个redisServer对象里面保存了redisDb对象(默认16个)。

redisDb对象通过字典保存所有的键值对。

阅读全文 »

redis持久化

概述

redis数据都在内存里面,为防止数据丢失,redis提供持久化功能。持久化方式如下

  • RDB持久化
  • AOF持久化
  • 混合持久化(4.0之后新增)
阅读全文 »

redis对象

概述

redis基于简单动态字符串、双端链表等基本数据结构,创建了一个对象系统。
包含字符串对象,列表对象,哈希对象,集合对象,有序集合对象。

Redis的对象系统还实现了基于引用计数技术的内存回收机制

阅读全文 »

redis数据结构

概述

Redis数据库里面的每个键值对都是对象组成的,其中

  • 数据库键总是一个字符串对象
  • 数据库键的值可以使字符串对象,列表对象,哈希对象,集合对象,有序集合对象这五种中的一种。

对象由底层数据结构支撑的,底层数据结构有简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表。

阅读全文 »

事务消息简介

RocketMQ事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终一致。

事务消息能保证producer发送消息的一致性。

阅读全文 »

RocketMQ消息消费概述

消息消费以组的模式开展,一个消费组内可以包含多个消费者,每一个消费组可订阅多个主题,消费组之间有集群模式广播模式两种消费模式。

  • 集群模式: 主题下的同一条消息只允许被其中一个消费者消费。
  • 广播模式: 主题下的同一条消息将被集群内的所有消费者消费一次。

消息服务器与消费者之间的消息传送也有两种方式:推模式、拉模式。

  • 拉模式 是消费端主动发起拉消息请求
  • 推模式 是消息到达消息服务器后,推送给消息消费者。(RocketMQ消息推模式的实现基于拉模式,在拉模式上包装一层,一个拉取任务完成后开始下一个拉取任务。)
阅读全文 »

存储概要设计

RocketMQ 主要存储的文件包括Comitlog文件ConsumeQueue 文件IndexFile文件

RocketMQ将所有主题的消息存储在同-个文件中,确保消息发送时顺序写文件, 尽最大的能力确保消息发送的高性能与高吞吐量。

为了提高消息消费的效率, RocketMQ引入了ConsumeQueue消息队列文件, 每个消息主题包含多个消息消费队列,每一个消息队列有一个消息文件。

IndexFile索引文件, 其主要设计理念就是为了加速消息的检索性能, 根据消息的属性快速从 Commitlog 文件中检索消息。

阅读全文 »

消息发送的三种方式

  • 同步:同步等待,直到消息服务器返回发送结果。
  • 异步 :指定消息发送成功后的回掉函数,然后调用消息发送API 后,立即返回,消息发送者线程不阻塞 ,直到运行结束,消息发送成功或失败的回调任务在一个新的线程中执行。
  • 单向:消息发送者向 MQ 执行发送消息 API 时,直接返回,不等待消息服务器的结果,只管发,不在乎消息是否成功存储在消息服务器上。
阅读全文 »

设计理念

RocketMQ 设计基于主题的发布与订阅 模式 , 其核心功能包括消息发送、 消息存储(Broker)、消息消费,整体设计追求简单与性能第一,主要体现在如下三个方面。

阅读全文 »