# cjfather-redis-stream-mq **Repository Path**: c-java-father/cjfather-redis-stream-mq ## Basic Information - **Project Name**: cjfather-redis-stream-mq - **Description**: redis stream mq - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2023-11-08 - **Last Updated**: 2026-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cjfather-redis-stream-mq 发布订阅模式消息队列 pub/sub #### 介绍 Redis的Stream数据结构实现消息队列、修改配置重启可以动态生成多个消费队列、支持集群部署、启动后访问`http://localhost:port/message/{mess}`产生数据并消费 #### 队列配置1 参考annotation下的consumers #### 队列配置2 application.yml中一个key表示一个队列,放一种数据类型,对应StreamConsumerRunner.getType方法进行消费,一条消息可以被每个group各消费一次,同一group内的consumer轮流消费消息,当消息比较多的时候可以部署为集群模式 group命名规范cjfather:group:{序号}.实现类名,group名字中只能包含一个点,group名字不能重复,同一key可以有多个group进行重复消费做不同业务 [ {"key":"cjfather:queue:1", "groups":[ {"group":"cjfather:group:1.userStreamConsumer" , "consumers":["cjfather:consumer:1","cjfather:consumer:2","cjfather:consumer:3"]} ,{"group":"cjfather:group:2.userStreamConsumer" , "consumers":["cjfather:consumer:21","cjfather:consumer:22","cjfather:consumer:23"]} ]} ] Redis的协议,特别是RESP(Redis Serialization Protocol)。在Redis的不同版本中,协议有一些变化。在Redis 6.0(以及更早的版本)中使用的是RESP2,而Redis 6.2开始引入了RESP3。但是请注意,Redis 6.2和7.0仍然支持RESP2,并且默认使用的是RESP2,而Redis 7.0开始将RESP3作为默认协议。 下面我将简要介绍RESP2和RESP3,以及它们之间的主要区别。 RESP2: RESP2是Redis最初使用的协议,它简单且易于实现。它支持以下数据类型: - 简单字符串(Simple Strings):以"+"开头,结尾是CRLF(\r\n) - 错误(Errors):以"-"开头,结尾是CRLF - 整数(Integers):以":"开头,结尾是CRLF - 批量字符串(Bulk Strings):以"$"开头,后面跟着字符串长度,然后是CRLF,接着是字符串内容,最后是CRLF - 数组(Arrays):以"*"开头,后面跟着数组长度,然后是CRLF,接着是数组中的每个元素(每个元素都是RESP2类型) RESP3: RESP3是RESP2的扩展,旨在更高效地支持更多的数据类型,并且使客户端能够更了解服务器返回的数据类型。RESP3在RESP2的基础上增加了以下数据类型: - 空值(Null):用单个下划线表示,例如"_\r\n" - 布尔值(Booleans):以"#"开头,后面跟着't'或'f',例如"#t\r\n"表示true,"#f\r\n"表示false - 双精度浮点数(Doubles):以","开头,例如",3.14\r\n" - 大整数(Big Numbers):以"("开头,例如"(1234567890\r\n" - 映射(Maps):以"%"开头,后面跟着键值对的数量,然后是一系列的键和值 - 集合(Sets):以"~"开头,后面跟着元素的数量,然后是一系列的元素 - 属性(Attributes):以"|"开头,类似于映射,但用于表示元数据,客户端可以忽略它们 - 推式数据(Push Data):以">"开头,用于服务器向客户端推送数据,例如在发布/订阅模式中 RESP3还允许在同一个连接中同时使用请求-响应模式和推送模式。 在Spring Boot 3中,如果你使用Redis,你可能会使用到Redis的客户端,比如Lettuce或Jedis。Lettuce从6.0版本开始支持RESP3,而Jedis目前(截至2023年)还不支持RESP3。 因此,如果你希望在Spring Boot 3中使用RESP3,你可能需要: 使用Lettuce作为Redis客户端。 配置Lettuce连接使用RESP3协议。