Advertisement

Redis常见故障解决方案

阅读量:

当slave 重新启动后,在RDB文件中保存相关信息,并使master方便地进行重同步;升级操作中非常有用。建议使用SHUTDOWN命令来保存slave并使其退出系统

2 主从数据不一致

=========

主从网络延时:

主多从少

====

部分重同步。可以通过命令 PSYNC master_run_id offset 执行。

主少从多

====

全面覆盖当前状态的情况,在自节点的读写机制下产生。为了解决这个问题,请考虑以下措施:终止相关配置或清空主数据库中的数据,并重新进行全量复制。

3 数据延迟

======

配置外部程序以监控主副节点之间的复制偏差量。当延迟超出阈值时向客户端发送警报信息。切换至主节点或任意其他可用节点。

对节点slave-serve-stale-data进行配置设为无效状态后, 除了用于查询信息(INFO)或管理服务副本(SLAVE OF)的请求外的所有请求都将触发错误提示‘SYNC with master in progress’

在失去了与Mater的连接状态或者还在执行复制操作中时,在线用户可采取以下措施发挥作用。

当 replica-serve-stale-data 设置为"是"(默认值),那么副本将回复客户端请求,并可能包含过期数据;或者,在首次同步的情况下,则数据集可能是空的

若禁用replica-serve-stale-data选项,则该副本将在不返回错误提示的情况下处理除以下这些信息外的所有命令:Infor、RepliCopy、Auth、Ping、Stop、RplcConf、Role、Config、Subscrpt、Unsubscrpt、PsusbScrpt、PunsbScrpt、Pubsh Scrpt、Pubsb Pubscrpt、Command Scrpts等:PostScript和Host相关信息也将受到此影响;此外还包括Latency相关的指标

4 脏数据

=====

4.1 脏数据产因

=========

4.1.1 Redis 删除策略

================

是因为读到了过期数据。

读到过期数据是 Redis 删除策略导致:

惰性删除

====

当master接收每次读取命令时都会监控K的状态,并一旦发现K超出时间限制( timeout),就会立即触发del命令来清除相关的键对象。随后会立即触发相关的slave节点(slave),以确保数据复制的一致性。值得注意的是, slave节点将会一直等待直到所有相关操作完成,并且不会再主动移除那些已经超时的数据。

定时删除

====

Redis的主节点通过内部定时任务机制定期采集指定数量的关键字;一旦检测到这些关键字已失效,则将执行删除命令;并随后同步多个从节点以完成数据一致性维护。

主动删除

====

当前内存使用情况已经超过maxMemory设定上限。系统将启动主动清除策略以确保maxMemory参数被正确配置。
注:当系统检测到大量数据处于超时状态时,
主节点在采集到期数据的速度方面存在不足。
因此,
主节点未进行过期键的数据读取操作,
导致secondary节点无法接收delete指令。
此时系统中主node所获取的数据均为已超时状态。

当前内存使用情况已经超过maxMemory设定上限。系统将启动主动清除策略以确保maxMemory参数被正确配置。
注:当系统检测到大量数据处于超时状态时,
主节点在采集到期数据的速度方面存在不足。
因此,
主节点未进行过期键的数据读取操作,
导致secondary节点无法接收delete指令。
此时系统中主node所获取的数据均为已超时状态。

4.1.2 从节点可写

===========

当该节点被配置为读写模式时,如果误将该节点的数据存储到其他地方,则会导致数据不一致。

4.2 解决方案

========

忽略

==

例如,在12306平台查看余票数量和双十一促销活动期间的商品库存。
你通常会发现这些数据存在前后不一致的问题。
因为您在查询时获得的信息可能存在误差。

选择性强制读主

=======

但是一旦进行库存扣款操作时,
就需要保证数据的准确性。
为了实现这一目标,
硬编码读取 master,
slaves被指定为备份服务器(某个业务)。

简单介绍一下自己啊!我是于1997年毕业于上海交通大学的学长。回想起来呀,在校期间也曾有过在小公司实习的经历呢!除此之外呀,在华为、OPPO这样的大厂也都留下过痕迹呢!2018年以后就在阿里巴巴工作啦!

众所周知,在Java领域工作的人士普遍面临职业发展与自我提升的过程中往往会选择自主学习或者参加培训课程。然而,在培训机构中高昂的学习费用常常让人感到压力重重。由于缺乏系统化的学习规划与指导,单纯的自主学习往往显得低效且耗时漫长。尽管如此,在实际操作中许多人仍然难以突破技术瓶颈而停滞不前!

为此特意整理了一份《2024年Java开发全套学习资料》,其初衷也很单纯,旨在帮助那些想自学提升却无从下手的朋友,并且希望能为大家减轻一些学习负担。

img

不仅提供了针对新手学习的基础知识资料...还有专门针对资深开发者设计的专业内容...全面覆盖了超过95%的核心Java知识要点...真正构建了一个系统化的知识体系!

因为文件较大,在此处仅展示了部分目录的截图。每个节点内部都包含了大厂面经、学习笔记、源码讲义等实用内容,并会持续不断地更新和完善。

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

ActiveMQ消息中间件面试专题

  • 请说明什么是ActiveMQ?
  • 当ActiveMQ服务器出现故障时该怎么办?
  • 遇到丢失的消息该如何解决?
  • 如何优化持久化消息的速度?
  • 当消息消费出现不均衡时该如何处理?
  • 遇到死信队列问题时该如何解决?
  • 如何设置合适的重发时间间隔和重发次数

ActiveMQ消息中间件面试专题解析拓展:

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM

redis面试专题及答案

  • 哪些Redis客户端支持一致性哈希协议?
  • Redis与其他键值存储系统有何不同?
  • 当前Redis内存占用情况如何?
  • 有哪些有效方法可以降低Redis内存占用?
  • 请告知查看Redis使用情况及状态信息的命令是什么?
  • 当Redis内存耗尽时会发生什么情况?
  • 单线程模式是否会影响多核CPU性能?提升建议是什么?
BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM

Spring面试专题及答案

谈述Spring这一概念及其核心理念。
探讨其主要优势和独特之处。
深入分析其设计理念的关键要素。
详细解释如何配置注解装配机制及其常见使用的注解类型。
简要概述其生命周期各阶段的特点及其对系统性能的影响。

Spring面试答案解析拓展

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM

高并发多线程面试专题

  • 现在有线程 T1、T2 和 T3。请阐述如何保证T2线程在其后执行,并且T3线程在其后执行。
  • 比较新Lock接口相较于基于synchronized块的优势是什么?如果让你设计一个高性能缓存支持并发读取与单点 writes,请说明其数据完整性保障机制。
  • 请比较wait与sleep方法的主要区别是什么?
  • 简述阻塞队列的Java实现步骤。
  • 简述生产者消费者问题的Java解决方案。
  • 编写一段会导致Deadlock现象的代码。请说明如何利用Java工具或机制来消除这种Deadlock。

高并发多线程面试解析与拓展

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM

jvm面试专题与解析

  • JVM主要由哪些组件构成?
  • JVM内存如何分区?
  • Java程序运行时的内存管理机制是什么?
  • 引入类型有哪些?
  • 垃圾回收机制何时介入内存管理?

JVM面试专题解析与拓展!

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM

《互联网巨头企业的面试真题解析与进阶开发核心学习笔记》点击传送门即可获取! | 关于JVM内存分区的详细解析

  • Java 的内存模型?
  • 引用的分类?
  • GC什么时候开始?

JVM面试专题解析与拓展!

[外链图片转存中…(img-zPCnfegh-1713377343090)]

《互联网大厂面试真题解析与进阶开发核心学习笔记及全套讲解视频和实战项目源码讲义》点击传送门即可获取!

全部评论 (0)

还没有任何评论哟~