云服务器做网站详细,easyphp搭建wordpress,免费的软件网站,建设网站群文章目录 基本模式生产者消费者原理模型redis实现java实现 发布者订阅者原理模型redis实现java实现 stream模式原理模型工作原理redis实现Java实现 选型外传 基本模式
采用redis 三种方案#xff1a; ● 生产者消费者#xff1a;一个消息只能有一个消费者 ●… 文章目录 基本模式生产者消费者原理模型redis实现java实现 发布者订阅者原理模型redis实现java实现 stream模式原理模型工作原理redis实现Java实现 选型外传 基本模式
采用redis 三种方案 ● 生产者消费者一个消息只能有一个消费者 ● 发布者订阅者一个消息可以被多个消费者收到 ● stream模式实现队列和广播模式
生产者消费者
原理模型 Producer调用redis的lpush往特定key里放消息Consumer调用brpop去不断监听key。
1、利用redis的链表存储数据实现队列模式 2、生产者左进消费者右出 3、消费者线程拉取数据模式
redis实现
10.255.20.232:1lpush test_mq lwd
1
10.255.20.232:1lpush test_mq lwd2
2
10.255.20.232:1lpush test_mq lwd3
3
10.255.20.232:1lrange test_mq 0 10
1) lwd3
2) lwd2
3) lwd10.255.20.232:1brpop test_mq 0
1) test_mq
2) lwd10.255.20.232:1lrange test_mq 0 10
1) lwd3
2) lwd2java实现
//producer
String keydemo:mq:test;
String msghello world;
redisDao.lpush(key,msg);//consumer,超时时间因情况而定
String keydemo:mq:test;
while(true){ListString msgsredisTemp.brpop(BLOCK_TIMEOUT,listKey);if(msgsnull)continue;String jobMsgmsgs.get(1);processMsg(jobMsg);
}发布者订阅者
redis从2.0版本开始支持pub/sub Redis 发布订阅 (pub/sub) 是一种消息通信模式发送者 (pub) 发送消息订阅者 (sub) 接收消息。 类似设计模式中的观察者模式。
redis可以作为pub/sub的服务端。订阅得通过subscribe和psubscribe命令向redis server订阅消息类型redis将消息类型称为channel。
当发布者通过publish命令向redis server发送特定消息时访问该消息类型全部client都会收到此消息。 一个client可以订阅多个channel也可以向多个channel发送消息。
原理模型 1、利用redis订阅模式redis不存储数据 2、实时获取channel数据不能获取历史数据(redis不存) 3、发布者发布不同topic有订阅就获取没有也不会保留
redis实现
# sub1
10.255.20.232:1SUBSCRIBE test_pub_sub
Switch to Pub/Sub mode. Close console tab to stop listen for messages.
1) subscribe
2) test_pub_sub
3) 11) message
2) test_pub_sub
3) lwd11) message
2) test_pub_sub
3) lwd2-- sub2
10.255.20.232:1SUBSCRIBE test_pub_sub
Switch to Pub/Sub mode. Close console tab to stop listen for messages.
1) subscribe
2) test_pub_sub
3) 11) message
2) test_pub_sub
3) lwd11) message
2) test_pub_sub
3) lwd2-- pub1
10.255.20.232:1PUBLISH test_pub_sub lwd1
2
10.255.20.232:1PUBLISH test_pub_sub lwd2
2java实现
待实现
stream模式
Stream是Redis5.0添加的一种数据结构是Redis对消息队列的实现。Redis 对 Streams 的采用受到 Apache Kafka 的启发并保留了 Redis 的简单性及其极其有趣和有效的用法。
Redis Stream 主要用于消息队列MQMessage QueueRedis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能但它有个缺点就是消息无法持久化如果出现网络断开、Redis 宕机等消息就会被丢弃。 简单来说发布订阅 (pub/sub) 可以分发消息但无法记录历史消息。 而 Redis Stream 提供了消息的持久化和主备复制功能可以让任何客户端访问任何时刻的数据并且能记住每一个客户端的访问位置还能保证消息不丢失。
原理模型 工作原理 1、通过stream数据类型做存储 2、通过group模式实现队列同一个组对应一个stream只能消费一次 3、纯mq模式 4、功能上有ack回执 5、多个group对应一个stream不同group中的消费者都可以消费到此stream 6、能够持久化
redis实现
-- server 增加stream
10.255.20.232:1XADD student_stream * name Tom age 8
1705387359901-0
10.255.20.232:1XADD student_stream * name lwd age 18
1705387391303-0
-- 创建组student_group 并绑定stream 并指定从0开始拿数据
10.255.20.232:1XGROUP CREATE student_stream student_group 0
OK-- client1
-- consumer_1监听组中的stream每次拿1条数九阻塞100s
10.255.20.232:1XREADGROUP GROUP student_group consumer_1 COUNT 1 BLOCK 100000 STREAMS student_stream
1) 1) student_stream2) 1) 1) 1705309636354-02) 1) name2) lwd3) age4) 33
-- 查看somestream中所有元素
XRANGE student_stream - -- 查看somestream中所有元素
XRANGE student_stream - -- 返回消费组student_group有多少未确认条数起始ID结束ID消费者及其未确认条数
XPENDING student_stream student_group10.255.20.232:1XPENDING student_stream student_group
1) 1
2) 1705309636354-0
3) 1705309636354-0
4) 1) 1) consumer_12) 1-- ack 回执确认读取
10.255.20.232:1XPENDING student_stream student_group
1) 1
2) 1705309636354-0
3) 1705309636354-0
4) 1) 1) consumer_12) 110.255.20.232:1XACK student_stream student_group 1705309636354-0
1
-- 再查看已读未确认消息
10.255.20.232:1XPENDING student_stream student_group
1) 0
2) null
3) null
4) null
Java实现
需要建立mq的管理机制 topic group可管理配置
选型
轻量级mq可使用redis stream 消息模式实现队列和发布订阅但需要redis版本5.0以上
外传 原创不易如若本文能够帮助到您的同学支持我关注我点赞收藏⭐️留言探讨问题看到立马回复格言己所不欲勿施于人 扬帆起航、游历人生、永不言弃