热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者比较重要的内容,希望大家能够喜欢,不足之处请大家多提宝贵地意见,我们一起提升,守住自己的饭碗。
关注公众号,技术道路不迷路

最近遇到一个问题,redis集群脑裂了,强行清了redis缓存(做的持久化数据)。应用用无痕浏览器可以正常打开,但是正常浏览器清理缓存不行,强行清理本地缓存才可以。经过分析和 前端的localStorage
有直接关系!
核心问题:localStorage 的持久性
1. 无痕/隐私模式: 在这种模式下打开浏览器,浏览器会创建一个全新的、临时的会话环境。这意味着: • 它不会加载之前正常浏览模式下存储的任何 localStorage
数据。• 它也不会保存本次会话中产生的 localStorage
数据到磁盘(关闭所有无痕窗口后数据消失)。• 因此,应用启动时面对的是一个“干净”的 localStorage
环境,就像第一次访问一样。2. 正常浏览器模式: • localStorage
数据是持久化存储在用户浏览器本地磁盘上的,并且按域名隔离。• 普通的“清除缓存”操作(通常指清除浏览历史、Cookie、缓存图片和文件等)默认设置下通常不会清除 localStorage
!这是关键点。• 用户需要特别选择清除“网站数据”、“本地存储”或类似选项(有时甚至需要选择时间范围如“所有时间”),或者使用“强制清理本地缓存”才能真正删除 localStorage
。
Redis 脑裂、清缓存与应用行为
1. Redis 脑裂影响: 脑裂导致主从不一致,应用可能读取到过期或错误的数据,或者写入操作失败。这很可能触发了应用前端或后端的异常处理逻辑。 2. 前端行为(关键): 你的前端应用很可能在 localStorage
中存储了一些与应用状态、用户认证或数据缓存相关的信息。例如:• 用户 Token (JWT 等): 用于维持登录状态。 • 应用配置/状态标志: 如维护模式标志、特定功能开关状态、上次更新时间戳等。 • 部分缓存数据: 前端可能缓存了从后端 API 获取的某些数据到 localStorage
以优化性能。• 错误状态/降级信息: 当检测到后端服务不可用(可能由脑裂引起)时,前端可能将“服务不可用”、“维护中”、“降级模式”等状态信息写入 localStorage
,并据此决定展示错误页面或降级 UI。3. 脑裂后应用状态写入 localStorage: 在 Redis 脑裂发生期间或之后强行清 Redis 缓存之前,你的前端应用很可能因为无法正常与后端交互(读取错误数据、写入失败、收到错误响应如 5xx 错误),执行了某些逻辑,将表示“异常状态”的信息写入了 localStorage
。例如:• 存储了一个 serviceStatus: 'down'
或inMaintenance: true
的标志。• 存储了一个表示“需要强制刷新”的标志。 • 存储了一个过期的、无效的或错误的用户 Token。 • 存储了基于错误 Redis 数据生成的、现在已失效的前端缓存数据。 4. 清 Redis 缓存后的现象: • 后端修复: 强行清理 Redis 缓存并解决脑裂问题后,后端服务本身很可能已经恢复正常。 • 前端“卡住”: • 当用户在正常浏览器模式下访问应用时,浏览器会加载脑裂期间写入的、表示“异常状态”的 localStorage
数据。• 你的前端应用启动时(或在关键操作前)会先读取 localStorage
中的这些状态信息。• 根据这些残留的、过期的异常状态信息,前端应用错误地判断系统仍然处于异常状态(如维护中、服务不可用、用户未认证等),因此阻止了用户正常访问或展示错误/空白页面。 • 普通的“清除缓存”没有触及 localStorage
,所以这些错误状态信息依然存在,问题持续。• 强制清理本地缓存(包括 localStorage
) 后,这些错误状态信息被删除。前端应用启动时读取不到这些信息(或读取到初始状态),转而尝试正常与已恢复的后端通信,应用就正常了。• 无痕模式正常: 因为无痕模式根本不加载之前存储的 localStorage
,所以前端应用启动时读取不到那些错误状态信息,表现正常。
结论
是的,localStorage
是导致业务异常现象(正常浏览器需强制清缓存,无痕模式正常)的关键原因。
Redis 脑裂期间,前端应用将某种表示后端异常的状态信息或依赖错误数据生成的数据写入了 localStorage
。即使后端 Redis 被修复,这些存储在用户浏览器本地的异常状态信息没有被清除(普通清缓存不包含 localStorage
),导致前端应用持续表现异常。无痕模式避开了这些脏数据,强制清 localStorage
则删除了这些脏数据。
解决和预防措施
1. 手动清除浏览器数据,必须包含“网站数据”、“本地存储”或“localStorage” 选项。 2. 检查前端逻辑: • 仔细审查前端代码,看哪些信息被存入了 localStorage
(特别是那些影响全局应用状态、路由、认证状态的信息)。• 重点审查异常处理逻辑: 当捕获到网络错误、后端 API 返回 5xx 错误、或特定业务逻辑错误时,前端是否会将状态信息写入 localStorage
?这些写入是否合理?是否有对应的清除机制?• 检查应用初始化流程: 应用启动时,从 localStorage
读取了哪些数据?这些数据是如何影响后续流程(如路由跳转、API 调用、UI 渲染)的?读取到这些数据后,是否有有效性校验(比如检查 Token 是否过期、状态标志是否在有效期内)?是否在读取到可能无效的数据后尝试主动与后端同步状态?3. 改进逻辑: • 谨慎存储状态: 避免将关键的、可能导致应用完全无法使用的状态(如 serviceDown: true
)仅依赖localStorage
。优先考虑使用内存状态或结合后端状态检查。• 增加状态失效/刷新机制: • 给存储在 localStorage
中的状态信息(如错误标志、维护模式标志)设置一个较短的过期时间 (TTL)。前端读取时检查是否过期,过期则清除并尝试重新获取后端状态。• 在应用启动或关键操作前,主动向后端发送一个轻量级的“健康检查”或“状态同步”请求。根据后端当前的实际状态来覆盖或清除 localStorage
中可能存在的过时状态。不要盲目信任本地存储的状态。• 版本化 localStorage: 在存储的数据结构中加入版本号。当应用发布新版本时,如果数据结构或含义有变化,可以通过检查版本号来自动清除或迁移旧的 localStorage
数据。4. 后端监控与告警: 加强 Redis 集群监控,快速发现和处理脑裂问题,减少对前端的影响窗口期。
总结: 问题根因在于 Redis 脑裂触发了前端将异常状态写入持久化的 localStorage
,而普通浏览器缓存清理无法清除它。修复的核心在于清理用户的 localStorage
脏数据,并优化前端逻辑(特别是异常处理和状态同步逻辑)以避免未来类似情况导致应用“卡死”。
接下来,介绍一本好书!

华为仓颉语言编程从新手到专家实战宝典:系统讲解+ 项目实战 + 多媒体教学资源,构建从入门到精通的完整学习路径,助力成为鸿蒙开发专家
关键点
实战讲解:通过实际项目案例帮助读者掌握仓颉的使用技巧,提升实践能力。
配套资源丰富:460页教学PPT + 490分钟实战讲解视频,全栈级仓颉开发教程,助你快速掌握鸿蒙生态核心语言。
仓颉与华为技术生态深度结合:从基础语法到实战应用,用仓颉开启华为智能开发新时代。
高效编码:帮助开发者提升编码效率,特别是在大规模数据处理和高性能计算场景中。
前瞻性技术:探索仓颉语言在未来技术发展中的应用潜力,展现其在人工智能、云计算等领域的前景。
内容简介
华为自研的仓颉语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现,以及开箱即用的工具链支持,为开发者打造了友好的开发体验和卓越的程序性能。
本书循序渐进地讲解了仓颉语言的核心知识,并通过具体实例的实现过程演练了开发仓颉语言程序的关键方法和流程。全书共19 章,分别讲解了从仓颉语言的基础语法、数据结构、面向对象编程、网络编程到多线程与并发处理等内容,最后通过实战项目——圆角图片视图库的开发,系统展示了仓颉语言的核心语法知识和实际应用技巧。
本书通俗易懂而不失技术深度,案例丰富,实用性强,涵盖了华为开发技术的最新动态和实践案例,同时涵盖了其他同类图书中很少涉及的开发工具与平台介绍。本书适合华为仓颉编程语言的初学者和进阶读者作为自学教程,也可作为培训学校和各大院校的相关专业的教学参考书。
作者简介
刘陈,山东大学计算机通信硕士,精通Java、C、C++、Python、Objective-C、Swift等多种编程语言。拥有10年的Android和iOS开发经验,以及5年的HarmonyOS开发经验。现任浪潮信息资深移动开发架构师和HarmonyOS技术专家,曾在HTC、联想等知名企业担任软件开发工程师、项目经理、产品技术主管等重要职务,具有丰富的技术研发和管理经验。
京东链接:https://item.jd.com/15006134.html
当当链接:https://product.dangdang.com/29877942.html
文中的概念来源于互联网,如有侵权,请联系我删除。
欢迎关注公众号:小周的数据库进阶之路,一起交流AI、数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。




