1.1 Redis
Redis 本身支持MQ功能,是一个轻量级的队列服务,具有高效性,但不具有可靠性(数据丢失),不提供队列监控。Redis 消息队列多应用于即时数据分析、秒杀计数器、缓存等轻量级,高并发,延迟敏感场景。
1.2 RabbitMQ
RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦。rabbitmq多应用于批量数据异步处理、并行任务串行化,高负载任务的负载均衡等 重量级,高并发,异步高可靠性场景
Redis数据丢失的影响
- Redis存储的应用场景,数据丢失是不能接受的;
因为Redis的持久化特性,数据还原很难保证一致性,因rdb全备和aof重写备份,RPO不能像MySQL这样保证恢复到故障操作的前一个事务。 - 缓存的应用场景,如果大量缓存数据丢失,往往导致后端存储组件”打死“,应用程序雪崩的情况
常见Redis数据丢失的情况
- 程序bug或人为误操作
- 因客户端缓冲区内存使用过大,导致大量键被LRU淘汰
- 主库故障后自动重启,可能导致数据丢失
- 网络分区的问题,可能导致短时间的写入数据丢失
- 主从复制数据不一致,发生故障切换后,出现数据丢失
- 大量过期键,同时被淘汰清理