1、关于Redis Stream介绍:(摘自:https://blog.csdn.net/qq_43956758/article/details/109860706)
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。
而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。
Redis Stream 的结构如下所示,它有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容:
代码示例:
pom.xml :
往Stream推送消息,2种方式(RedisConnectionFactory 和 StringRedisTemplate) :
使用RedisConnectionFactory :
使用StringRedisTemplate:
增加controller,方便http调用推送消息:
从Stream消费消息:
1、系统启动以后,初始化监听器,实现ApplicationRunner :
2、实现函数接口 StreamListener
测试:
1、先通过Redis控制台创建stream以及group。
127.0.0.1:6379> XADD mystream * hello world
"1622102510267-0"
127.0.0.1:6379> XGROUP CREATE mystream group-1 $
OK
2、启动程序后,通过控制台往stream生产消息
127.0.0.1:6379> XADD mystream * name zhongguo
"1583208571017-0"
程序成功的消费了这条消息,日志如下:
2021-05-27 16:32:11.607 [INFO ] [task-1] [com.loong.redis.sub.OrderStreamListener][35] - stream message。messageId=1622104331606-0, stream=mystream, body={name=zhongguo}
通过http往stream生产消息:
http://localhost:8080/redis/stream/sendMessage1
http://localhost:8080/redis/stream/sendMessage2
参考:
https://blog.csdn.net/qq_43956758/article/details/109860706
https://springboot.io/t/topic/1436