我的编程空间,编程开发者的网络收藏夹
学习永远不晚

redis的消息队列防止数据丢失的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

redis的消息队列防止数据丢失的方法

序言:

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。

“消息队列”是 Microsoft 的消息处理技术,它在任何安装 Microsoft Windows 的计算机组合中,为任何应用程序提供消息处理和消息队列功能,无论这些计算机是否在同一个网络上或者是否同时联机。

“消息队列网络”是能够相互间来回发送消息的任何一组计算机。网络中的不同计算机在确保消息顺利处理的过程中扮演不同的角色。它们中有些提供路由信息以确定如何发送消息,有些保存整个网络的重要信息,而有些只是发送和接收消息。

Redis实现消息队列有两种形式:

广播订阅模式:基于Redis的 Pub/Sub 机制,一旦有客户端往某个key里面 publish一个消息,所有subscribe的客户端都会触发事件集群订阅模式:基于Redis List双向+ 原子性 + BRPOP

Redis消息队列时,当Redis宕机后,消息可能会丢失(也要看持久化的策略)。如果收消息方未有重发和验证机制,Redis内的数据会出现丢失。所以,使用Redis的作为消息队列,通常是对于消息的准确性并非特别高的场景。

如果绝对的保证数据最终一致性,保证消息百分百不丢,那么需要:

1.写入时候要求启用事务处理,保证写一定成功。

2. redis配置成任何变更一定实时持久化,比如存储端是磁盘的话,每次变更马上同步写入磁盘,才算完成。redis是支持这种方式配置的,但是这么做会使它的内存数据库特性完全消失,性能变得十分低下。

3. 消费端也要实现事务方式,处理完成后,再回来真实删除消息。

4. 多线程或者多端同时并发处理,可以通过锁的方式来规避。

3 4的需求需要自己实现,可以一起考虑,用另外一个队列实现的方式也可以,但是更好的方式是在队列内部实现个计数器。hash格式的加个字段加数值,list的先推一个数值打底,string的头上加个数值再加个分隔符,就可以做个简单计数器了,虽然土,胜在够实用。

除了特定的系统之外,一般不会要求这么强的一致性,实现倒不难,但是性能会很差很差。

银行类支付类业务会要求严格的事务一致性,而互联网类业务一般会用点取巧的方式,就是可以容忍极短时间内少量数据丢失的方式,换取更高性能。

比如上面的redis处理,可以改为1000条数据变更的时候再真实落盘,即写入磁盘。那么极限情况下,如突然断电,存在可能丢失这1000条数据的风险。当然这种情况出现的概率也是很低的(远离蓝翔挖掘机?),所以大部分场景下可以接受。

以上就是redis消息队列如何防止数据丢失的详细内容,更多请关注亿速云其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

redis的消息队列防止数据丢失的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

在redis中防止消息丢失的机制

在项目中,由于网络问题,我们很难保证生产者发送的消息能100%到达消息队列服务器,也就是说有消息丢失的可能性,因此,生产者就必须具有消息丢失检测和重发机制,这篇文章主要介绍了如何在redis中防止消息丢失,需要的朋友可以参考下
2023-02-08

Redis消息队列实现的方法是什么

Redis消息队列通常通过使用Redis的List数据结构来实现。消息生产者可以将消息推送到List中,而消息消费者可以从List中获取消息进行处理。通过使用Redis的原子操作来实现消息的生产和消费,可以确保消息队列的高效性和可靠性。一些
Redis消息队列实现的方法是什么
2024-04-22

队列的消息确认和消费失败处理在PHP与MySQL中的实现方法

队列是一种常见的消息传递机制,它可以帮助解决系统中的高并发问题,实现异步处理和解耦。在队列的设计中,消息的确认和消费失败处理是非常重要的环节。本文将探讨使用PHP与MySQL实现队列的消息确认和消费失败处理的方法,并提供具体的代码示例。消息
2023-10-21

Python的Flask框架应用调用Redis队列数据的方法

任务异步化 打开浏览器,输入地址,按下回车,打开了页面。于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容。 我们每天都在浏览网页,发送大大小小的请求给服务器。有时候,服务器接到了
2022-06-04

队列技术在PHP与MySQL中的消息幂等性和数据去重的处理方法

引言:随着互联网的快速发展,网站和应用程序的并发量不断增加,对于数据存储和处理的效率要求也越来越高。而队列技术成为了解决高并发场景下数据处理问题的重要工具之一。本文将介绍如何利用队列技术在PHP与MySQL中实现消息幂等性和数据去重的处理方
2023-10-21

Win8系统玩LOL游戏提示"关闭程序以防止信息丢失"的解决方法

Win8系统玩LOL游戏提示"关闭程序以防止信息丢失",如下图所示:Win8系统玩LOL游戏提示"关闭程序以防止信息丢失"的解决方法:方法一:如果“内存不足”弹出窗口出现在玩LOL游戏过程中,建议不要理会,更不要点击
2022-06-04

编程热搜

目录