学习目标:
例如:
- redis的基本情况
- redis可能出现的问题
- 如何维护高并发下的redis发布订阅
- redis发布订阅的应用场景
学习产出:
redis的基本情况
空间小
redis基于内存存储
,也就意味着使用Redis不能长时间存储大量数据。
缺乏消息队列语义
redis订阅发布模型缺乏消息队列语义
。如果生产者在发布消息之前奔溃,消费者将错过该消息。可能导致消息不一致和应用程序错误行为的风险。
缺乏持久性
redis订阅发布模型缺乏持久性
①。意味着如果redis服务器奔溃或者重新启动,发布的消息将会丢失,也是会导致数据不一致和应用程序错误行为的风险。
性能问题
在高频率发布和消费消息时(订阅者数量过多,消息量过大
),Redis订阅发布模型可能会引起性能问题。这种模型的复杂性比标准的消息队列系统要高得多,而且redis服务器的资源也会更快的消耗。
redis可能出现的问题
数据丢失 :缺乏持久性,redis奔溃导致消息丢失,数据不一致和应用程序错误行为。
应用程序错误:缺乏消息队列语义,生产者奔溃导致消费者无法获得消息,引发程序错误行为。
性能问题:redis订阅发布模型引发的性能问题高延迟和高负载,威胁应用程序稳定性和可用性。
如何维护高并发下的redis发布订阅
使用RabbitMQ或kafka
事件溯源:消息存储在可靠的存储系统中。
优化redis服务器的性能和配置(redis集群、消息缓存技术、多线程技术、负载均衡技术)
,避免使用Redis订阅发布模型。
redis发布订阅的应用场景
不建议用于消息可靠性要求高的场景中。
redis的订阅发布不是一种可靠的消息系统。当狐仙客户端连接退出,或者极端情况下服务端发生主备切换时,没消费的消息会被丢弃。
①、redis支持数据持久化通过使用两种主要方法:RDB持久化和AOF持久化。这些方法可以将数据保存在磁盘上,以避免数据在redis服务器重启时丢失。
然而,Redis的发布订阅模型缺乏持久性主要是因为他不是设计用于数据持久化的场景。发布订阅模型主要用于消息传递和实时通信,其中消息的关注点更多地势实时性和及时传递,而不是长久存储。
当一个发布者发布消息时,他会讲消息发送给所有订阅者。这里重点是实时消息传递,而不是消息的长期存储。Redis的发布订阅模型主要关注于消息的传递而不是消息的历史记录或长期存储。因此,他并没有内置的机制来对消息进行长期持久化。
提示:个人建议不要用redis的订阅发布功能O(∩_∩)O哈哈~