Redis 基础教程

Redis 命令

Redis 高级教程

Redis 笔记

Redis 流(Streams)


Redis 5.0 增加了很多新的特色功能,其最大的新特性就是多出了一个数据结构 Stream,它是一个新的强大的支持多播的可持久化消息队列,其极大地借鉴了 Kafka 的设计。

Redis 流 简介

Redis Stream 的结构如下图,它有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容。消息是持久化的,Redis 重启后,内容还在。

每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用 xadd 指令追加消息时自动创建。

每个 Stream 都可以挂多个消费组(Consumer Group),每个消费组会有个游标 last_delivered_id 在 Stream 数组之上往前移动,表示当前消费组已经消费到哪条消息了。每个消费组都有一个 Stream 内唯一的名称,消费组不会自动创建,它需要单独的指令 xgroup create 进行创建,需要指定从 Stream 的某个消息 ID 开始消费,这个 ID 用来初始化 last_delivered_id 变量。

每个消费组的状态都是独立的,相互不受影响。也就是说同一份 Stream 内部的消息会被每个消费组都消费到。

同一个消费组可以挂接多个消费者(Consumer),这些消费者之间是竞争关系,任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。每个消费者有一个组内唯一名称。

消费者内部会有一个状态变量 pending_ids,它记录了当前已经被客户端读取,但是还没有 ack 的消息。如果客户端没有 ack,这个变量里面的消息 ID 就会越来越多,一旦某个消息被 ack,它就开始减少。这个 pending_ids 变量在 Redis 官方被称为 PEL,也就是 Pending Entries List,这是一个核心的数据结构,它用来确保客户端至少消费了消息一次,而不会在网络传输的中途丢失了而没被处理。

Redis 流命令

可用版本 命令及描述
>=5.0.0

XACK key group ID [ID ...]

用于从流的消费者组的待处理条目列表中删除一条或多条消息。

>=5.0.0

XADD key ID field value [field value ...]

将指定的流条目追加到指定 key 的流中。

>=5.0.0

XCLAIM key group consumer min-idle-time ID [ID ...] [IDLE ms] [TIME ms-unix-time] [RETRYCOUNT count] [FORCE] [JUSTID]

在流的消费者组上下文中,改变待处理消息的所有权。

>=5.0.0

XDEL key ID [ID ...]

从指定流中移除指定的条目。

>=3.0.0

CLUSTER FAILOVER [FORCE|TAKEOVER]

只能在集群的 slave 节点上执行,让 slave 节点进行一次人工故障切换。

>=3.0.0

CLUSTER FORGET node-id

从收到命令的 Redis 集群节点的节点信息列表中移除指定 ID 的节点。

>=3.0.0

CLUSTER GETKEYSINSLOT slot count

返回存储在连接节点的指定哈希插槽(hash slot)里面的 key 名称列表。

>=3.0.0

CLUSTER INFO

显示当前连接的集群的各种信息。

>=3.0.0

CLUSTER KEYSLOT key

返回一个整数,用于标识指定键所散列到的哈希槽。

>=3.0.0

CLUSTER MEET ip port

被用来连接不同的开启集群支持的 Redis 节点,以进入工作集群。

>=3.0.0

CLUSTER NODES

对集群中的每个节点都有当前集群配置的一个视图(快照)。

>=5.0.0

CLUSTER REPLICAS node-id

列出指定主节点的副本节点的集群信息。

>=3.0.0

CLUSTER REPLICATE node-id

重新配置一个节点成为指定 master 的 salve 节点。

>=3.0.0

CLUSTER RESET [HARD|SOFT]

重置集群中的一个节点。

>=3.0.0

CLUSTER SAVECONFIG

强制保存配置 nodes.conf 至磁盘。

>=3.0.0

CLUSTER SET-CONFIG-EPOCH config-epoch

为一个全新的节点设置指定的 config epoch。

>=3.0.0

CLUSTER SETSLOT slot IMPORTING|MIGRATING|STABLE|NODE [node-id]

根据子命令选项,修改接受节点中哈希槽的状态。

>=3.0.0

CLUSTER SLAVES node-id

会列出指定 master 节点的所有 slave 节点。

>=3.0.0

CLUSTER SLOTS

返回哈希槽和 Redis 实例映射关系。

>=3.0.0

READONLY

开启与 Redis Cluster 从节点连接的读请求。

>=3.0.0

READWRITE

禁止与 Redis Cluster 从节点连接的读请求。