- 博客(43)
- 收藏
- 关注
原创 缓存穿透、击穿、雪崩:高并发 Feed 流的全方位防御实践
摘要 缓存穿透、击穿和雪崩是高并发系统中常见的缓存问题。本文结合ZhiHub社区Feed流项目实践,详细阐述了针对这三类问题的防御体系: 缓存穿透:通过NULL哨兵缓存不存在的数据(30-60秒TTL+随机抖动)、参数前置校验和片段缓存优先策略,有效防止无效请求穿透缓存层。 缓存击穿:采用SingleFlight机制合并并发请求,确保热点数据失效时只有一个回源请求,避免数据库被瞬时洪峰压垮。 缓存雪崩:通过TTL随机分散、热点数据自动续期、读写分离等策略,防止大量缓存同时失效导致的级联故障。 整个防御体系融
2026-06-06 16:57:31
30
原创 缓存三剑客预防策略
文章摘要(149字): 缓存穿透、击穿、雪崩是分布式系统的高频痛点。本文基于ZhiHub社区Feed流实战,提出"防→挡→兜→修"四层防御体系:通过NULL哨兵+参数校验阻断无效请求;利用SingleFlight合并回源并发;采用TTL随机抖动+热点动态延长防雪崩;结合反向索引+双删策略保障一致性。代码示例涵盖片段缓存熔断、令牌桶限流、分布式锁重建等关键技术,形成从请求入口到数据库的全链路防护,有效应对瞬时洪峰与系统性崩溃风险。 关键词: 缓存穿透、SingleFlight、TTL抖动、片段缓存、令牌桶限流
2026-06-06 16:56:03
105
原创 滑动窗口热键探测与三级缓存设计
智能热点缓存治理方案 本文提出了一种基于热度驱动的Feed流缓存优化方案,通过滑动窗口探测、动态TTL调整和多级缓存协同,有效解决高流量社区平台中的缓存痛点。方案核心采用JVM内存分段计数实现轻量化热点探测,将热度分为四个等级并关联不同缓存有效期。通过三级缓存架构(Redis碎片缓存、Redis页面骨架、Caffeine本地缓存)实现高效读取,同时结合SingleFlight防击穿和实时用户状态更新机制。该方案无需重构现有架构,运维成本低,可显著降低数据库负载并提高缓存命中率,QPS处理能力可达数万级别。
2026-06-06 15:33:06
492
原创 亿级流量下的 Redis 计数系统设计:位图事实 + 事件聚合 + SDS 汇总
事实与汇总分离:位图是唯一的"真相来源",SDS 是为读优化的"物化视图"状态驱动而非操作驱动:计数变化源于状态变更,天然幂等异步折叠削峰:Kafka 作为缓冲层,将高频写操作攒批折叠为低频 SDS 更新定长结构极简存储:一个用户的全量计数仅 20 字节,无哈希表开销。
2026-06-05 20:52:49
371
原创 亿级流量下的 Redis 计数系统设计:位图事实 + 事件聚合 + SDS 汇总
事实与汇总分离:位图是唯一的"真相来源",SDS 是为读优化的"物化视图"状态驱动而非操作驱动:计数变化源于状态变更,天然幂等异步折叠削峰:Kafka 作为缓冲层,将高频写操作攒批折叠为低频 SDS 更新定长结构极简存储:一个用户的全量计数仅 20 字节,无哈希表开销。
2026-06-05 20:48:42
172
原创 百万并发的点赞计数,我们为什么要把“事实“和“计数“拆开?
本文介绍了一套面向内容平台的高性能计数架构,通过将"事实"与"计数"拆分开来,在强一致与高并发间取得平衡。系统采用三层设计:底层使用分片位图记录用户行为事实,确保原子操作和幂等性;中间通过事件聚合消峰;上层采用紧凑的SDS快照存储最终计数。架构亮点包括:分片位图避免单键过热,事件聚合降低写入压力,定长二进制存储提升读取效率,以及完善的重建机制保障数据可靠性。该方案有效解决了内容平台中点赞等行为数据的实时性和可扩展性问题。
2026-06-05 20:32:08
548
原创 解决双写不一致!Canal+Outbox+Kafka 高可靠事件驱动架构
本文介绍了一种基于Canal+Outbox+Kafka构建高可靠事件驱动架构的方案,解决社交场景中"关注"操作的多数据源一致性问题。核心思路是将消息发送转化为数据库写入,利用MySQL事务保证原子性,通过Canal监听binlog异步投递事件。方案包含三个关键部分:1)业务层在同一事务中写入业务表和outbox事件表;2)Canal中间层监听outbox表变更并推送到Kafka;3)消费层多个消费者组异步处理事件,实现数据最终一致性。文章详细展示了表结构设计、代码实现及技术要点,突出了该架构在保证数据一致性
2026-06-05 16:38:19
501
原创 拿捏登录安全:RS256 + 双令牌,把非法请求拦在 Redis 白名单门外
双令牌认证机制解析:使用短效accessToken(15-30分钟)进行业务请求认证,配合长效refreshToken(7-30天)实现无感续签。该方案通过JWT无状态验证保障分布式性能,借助Redis存储refreshToken实现会话管理,既解决了单令牌的安全风险(盗用难撤销),又避免频繁登录。核心实现包括:RSA非对称加密签发/验证JWT、Redis白名单控制refreshToken有效性、Spring Security配置无状态认证。安全增强措施包含BCrypt加密、验证码防护和登录审计,建议acc
2026-06-04 22:10:19
740
原创 亿级流量设计之布隆过滤器原理、优缺点及主流替代方案
数据结构空间占用查询性能支持删除误差情况落地难度核心适用场景原生布隆过滤器极低极高不支持低假阳性极低静态海量判重、缓存穿透防护、黑名单过滤计数布隆过滤器较低高支持低假阳性低动态少量删数、临时风控过滤布谷鸟过滤器极低(优于布隆)极高支持极低假阳性中海量动态增删判重、爬虫去重、实时风控极低(整数最优)极高支持零误差中整数数据去重、范围查询、大数据统计HashSet极高高支持零误差极低小数据量、绝对精准业务场景极致低极高。
2026-06-03 22:04:22
447
原创 TreeMap 核心原理与实战
TreeMap 是java\.util包下的有序键值对集合,直接实现了接口,间接实现了 Map 接口,也是 Java 中唯一具备完整排序能力的 Map 实现类。SortedMap:提供基础的按键排序能力;:在排序基础上,拓展了区间查询、邻近键查询、首尾键获取等高级能力;这也是 TreeMap 区别于 HashMap、LinkedHashMap 的核心优势,不仅有序,还支持丰富的范围检索操作。自然排序规则固定、灵活性差,无法满足复杂业务排序需求(如倒序、多字段排序、空值兼容排序)。此时可以通过传入。
2026-05-31 22:35:25
752
原创 MongoDB 超全入门到实战:从原理、CRUD到高可用架构
本文摘要介绍了MongoDB的核心概念、优势及入门指南。作为一款文档型NoSQL数据库,MongoDB凭借无模式设计、高性能读写、分布式扩展等特性,解决了传统关系型数据库在互联网场景下的痛点。文章从安装部署、核心概念到基础CRUD操作进行了详细讲解,帮助开发者快速上手MongoDB,适应灵活多变的业务需求。通过学习,读者可以掌握MongoDB的基本使用方法,为后续深入学习和企业级应用奠定基础。
2026-05-30 22:36:54
790
原创 你真的懂CAS吗?从底层原理、ABA问题到实战讲解
文章摘要: CAS(Compare And Swap)是Java并发编程的核心无锁技术,通过比较内存值与预期值实现原子更新,避免线程阻塞。其核心优势在于高性能(无锁自旋)和低开销,但存在ABA问题(变量被修改后恢复原值导致误判)和高竞争场景CPU消耗大的缺陷。解决方案包括版本号机制(如AtomicStampedReference)和配套技术(volatile保证可见性、自适应自旋优化性能)。CAS适用于低竞争单变量场景,而高竞争或多变量操作推荐使用synchronized或锁降级。作为JUC并发包的底层基石
2026-05-29 21:48:20
568
原创 Redis看门狗机制详解(原理+源码+踩坑+面试全覆盖)
Redis分布式锁的看门狗机制解析 本文深入剖析Redis分布式锁的核心痛点——锁提前超时释放问题,并详细讲解Redisson的看门狗自动续期解决方案。主要内容包括: 问题根源:原生Redis锁设置固定过期时间会导致业务未完成时锁失效,引发并发问题 解决方案:Redisson看门狗机制通过后台线程每10秒自动续期(默认续至30秒),确保业务执行期间锁持续有效 核心特性: 线程隔离的定时检测 精准的线程绑定 自动销毁机制 原子性续期操作 实现原理:通过Lua脚本保证续期原子性,结合Netty时间轮调度实现定时
2026-05-26 22:03:45
697
原创 吊打Guava Cache!Caffeine高性能本地缓存深度解析(原理+实战+调优+避坑)
Caffeine是一款基于Java8开发的高性能本地缓存框架,开源社区活跃、持续迭代维护,目前是Spring框架默认的本地缓存实现。凭借算法和性能的双重优势,已经成为替代Guava Cache的行业标准方案,广泛应用于各大互联网企业的生产项目中。Caffeine凭借Window TinyLFU混合算法、无锁并发设计、完善的淘汰机制,成为Java本地缓存的最优方案,具备高性能、高命中、高可用的核心优势,完美解决了传统本地缓存的内存溢出、缓存污染、并发卡顿等问题。
2026-05-25 20:07:41
657
原创 JVM垃圾回收机制超全详解:从底层原理到线上调优实战
摘要: JVM垃圾回收(GC)是Java自动内存管理的核心机制,解决内存溢出、程序卡顿等开发痛点。GC通过可达性分析算法判定垃圾对象,基于分代模型(新生代/老年代)采用不同回收算法:新生代使用复制算法(高效但内存利用率低),老年代采用标记-清除或标记-整理(避免碎片)。关键概念包括Minor GC(新生代回收)、Full GC(全堆回收)以及四种引用类型(强/软/弱/虚引用)。理解GC原理对性能调优、面试及底层开发至关重要,需结合分代特性、回收算法和收集器(如CMS/G1)进行实战优化。
2026-05-24 19:36:17
688
原创 ConcurrentHashMap 进阶实战:高阶原子操作、并发踩坑与 SingleFlight 工程落地
很多 Java 开发者对的认知,往往始于对HashMap线程不安全的恐惧,终于对putget方法的熟练掌握。在他们的工具箱里,只是一个“加了锁的 HashMap”,用来在并发环境下安全地存取数据。但如果你的理解仅止于此,很遗憾,你只是在使用一个线程安全的容器,却从未触及高并发设计的门槛。这个不到 60 行的能力实现方式收益请求合并原子占位相同 key 的并发请求只穿透一次到后端结果共享多线程等待所有等待者零轮询、低开销地拿到结果超时熔断避免因个别慢任务拖垮整个调用链精准清理条件删除。
2026-05-23 21:12:06
695
原创 分层缓存调度:削峰控压下的 Feed 流高性能设计
整套三级缓存架构,通过分层存储、动静解耦、读写分离、个性后置、并发防护、最终一致纠偏,完美解决高并发Feed流的性能与一致性矛盾,可通用落地于所有信息流、列表页、推荐流等高读低改业务场景。
2026-05-22 17:29:13
752
原创 Elasticsearch 高级检索实战:multi_match 宽召回 + function_score 加权排序 + search_after 游标分页落地实现
本文介绍了一个基于Elasticsearch的企业级内容社区搜索系统设计方案。系统采用SpringBoot框架,通过Elasticsearch 8.x实现核心搜索功能,主要特点包括:1) 采用IK中文分词器优化中文检索;2) 设计多字段匹配策略提高召回率;3) 结合业务指标加权实现智能排序;4) 使用search_after游标解决深度分页问题;5) 通过全量回灌+增量同步机制保证数据一致性。系统还实现了关键词高亮、搜索建议等增强功能,并通过编码自动识别、异常处理等工程化实践确保系统健壮性。整体架构包含索引
2026-05-22 10:23:59
590
原创 基于 Outbox 事务表 + Canal 监听+kafka+多级缓存:高并发社交关注系统全链路架构设计
高可用依托 Spring 事务保障业务数据写入原子性,结合 Outbox+Canal 构建可靠事件链路,既保证库表数据不会出现错乱偏差,又能实现业务事件百分百不丢失,整体业务流转稳定可靠。高性能搭建本地缓存 + Redis 分布式缓存 + 数据库三级缓存体系,依靠多级缓存完成流量削峰与热点数据承载,日常绝大多数查询请求直接命中缓存响应,极少流量穿透至数据库,接口响应速度与系统吞吐能力大幅提升。高扩展。
2026-05-19 15:47:56
705
原创 为什么 Kafka 能做到不丢不重?ACK + 幂等 + 事务深度拆解
在分布式消息队列系统中,可靠性保障主要围绕三大核心问题展开:消息丢失、重复消费和原子性保证。Kafka 针对这些问题构建了完整的可靠性体系,包括生产者ACK应答机制、消费者Offset提交机制、生产者幂等性以及事务机制。本文将深入解析这些机制的底层原理、工作流程、优缺点,并结合实际生产中的常见问题和最佳实践,全面剖析Kafka实现消息不丢不重的核心技术原理。ACK 级别可靠性吞吐量消息延迟适用场景0最低最高最低非核心日志、监控埋点1中等适中适中绝大多数常规业务all/-1。
2026-05-18 20:04:45
412
1
原创 跳出 CRUD:深入剖析 Redis 管道 Pipeline 底层通信机制
Redis Pipelining 即管道技术,是 Redis 体系中一款专门用于大幅提升命令执行效率的高性能优化方案。其核心设计思路为,客户端可预先批量组装多条 Redis 操作命令,统一一次性发送至服务端,全程无需等待单条命令执行完成并返回响应后,再发起下一条指令请求,以此省去频繁网络交互带来的多余开销。目前市面上主流的 Java、Python、Go 等各类编程语言 Redis 客户端,均已全面兼容并原生支持 Pipelining 管道功能,开发者无需额外改造底层即可快速上手使用。
2026-05-18 14:56:52
351
原创 亿级流量无雪崩!基于 Bitmap 分片的可自愈高可用计数架构实战
日常:增量聚合高性能读写- 异常:Bitmap全量溯源精准修复- 并发:锁\+限流\+退避三重防崩- 兜底:零人工干预、自动自愈恢复- 解决传统计数丢数、错乱、热点问题- Bitmap分片解决大Key问题,Redis性能极致稳定- 二进制压缩存储,内存占用极低- 全自动自愈,运维成本为0一篇热点文章(比如热搜)瞬间 10000 个人同时进来查看结果发现计数丢失了,需要重建如果不限制:1 万线程同时去重建Redis、位图统计 直接被打爆系统雪崩、宕机!所以必须加保护:第一次失败 →。
2026-05-18 10:22:12
769
原创 从Bitmap到Roaring Bitmap:一文搞定位图分片与Redis集群设计
位图是一种极致轻量化的二进制数据结构,它不存储具体业务数据本身,只记录元素的存在状态。核心逻辑十分简单:用单个比特位(bit)一一映射目标数据,约定二进制 0 代表该数据不存在,二进制 1 代表该数据已存在。不同于普通集合需要完整存入数据内容,位图直接以比特位的下标作为数据唯一标识,依靠位的位置完成数据映射,仅用极小空间就能完成海量元素的存在性标记,彻底摒弃冗余存储,实现空间利用率最大化。推荐阅读《Redis Deep Dive》相关章节《数据密集型应用系统设计》——分布式数据分片章节。
2026-05-16 21:26:46
934
原创 吊打 HashTable!ConcurrentHashMap 凭什么成为并发神器
特性HashTable锁粒度全表锁桶级锁(CAS + synchronized)读操作需要获取锁完全无锁(volatile + Unsafe 可见性)写操作锁整表,阻塞所有读写只锁所在桶,其他桶可并发写扩容单线程锁内复制,阻塞一切多线程协同迁移,读写不阻塞计数锁内 ++CounterCell 分散竞争数据结构链表链表 + 红黑树,查询 O(log n)并发度1理论上等于桶数ConcurrentHashMap 之所以能成为并发神器,并非用了什么黑魔法,而是。
2026-05-15 15:37:33
424
原创 高性能二级缓存设计:Caffeine + 滑动窗口热点降级方案
SpringBoot本地缓存+热点key自动探测+动态TTL延长,解决高并发信息流分页场景这是一个可配置、高性能、自动识别热点、自动延长缓存时间的本地缓存系统:配置类:统一缓存大小,过期时间,热点阈值缓存构建类:创建本地caffeine本地缓存热点探测器:滑动窗口统计访问热度,分级,动态延长TTL作用:让热门内容缓存更久、冷门内容自动过期,大幅减轻数据库 / 服务压力。当本地 Caffeine 缓存里的缓存键值对数量,超过 条时,Caffeine 自动按照自己内置淘汰算法,删掉一部分缓存,控制总数不超限。
2026-05-12 22:29:55
510
1
原创 Ubuntu安装Claude code最新教程
依托超大超长上下文能力,可全局读懂整个代码库架构与依赖关系,轻松实现跨文件代码重构、Bug精准定位、业务逻辑梳理以及自动化Git流程操作,同时适配后端开发、项目重构、脚本编写等多类开发场景,低幻觉高推理的特性搭配Ubuntu稳定的运行环境,能极大简化开发调试、代码审查与项目维护流程,有效提升日常编码与工程协作的整体效率。五:配置 Claude Code 的环境变量(核心步骤)四:安装 Claude Code CLI。这里apikey可以去爱阿里云百炼。二:安装 Node.js。这里可能已经配置好了。
2026-05-07 22:46:34
343
原创 Redis 通信协议 RESP 底层原理剖析
Redis 通信协议(RESP)是一种简单、高效、二进制安全的文本协议,核心是,源码层面由网络 IO、协议解析、命令执行三部分协同完成。以下从协议规范、源码流程、核心函数与关键逻辑逐层解析。核心设计思想。
2026-05-06 22:30:05
595
原创 Ubuntu Docker 部署 Kafka 4.2.0(KRaft 无 Zookeeper)和kafkaUI
Kafka 与 Kafbat UI 需要在同一网络下通信,先创建网络:三、部署 Kafka 4.2.0(KRaft 模式)1. 执行部署命令直接复制运行,自动停止旧容器并全新启动:2. 查看 Kafka 运行状态看到 容器运行即成功。出现 表示启动完成。2. 访问 Kafbat UI无需登录,直接管理 Kafka。2. 创建测试主题3. 启动生产者(发送消息)输入内容回车即可发送。新开一个终端执行:六、常用运维命令
2026-05-04 21:17:21
287
原创 Redis 内存回收底层原理全解析
Redis数据都会被封装成一个RedisObject结构// 对象类型// 编码方式// LRU: 以秒为单位记录最近一次访问时间, 长度24bit// LFU: 高16位以分钟为单位记录最近一次访问时间, 低8位记录逻辑访问次数// 引用计数, 计数为0则可以回收void *ptr;// 数据指针, 指向真实数据} robj;流程图详解1. 判断内存是否充足2.判断内存策略是否为noeviction淘汰策略是内存满了就报错,不淘汰任何数据3.判断是否是allkeys-*策略。
2026-05-04 21:13:16
690
原创 零基础也能懂!Ubuntu 最新 Docker 安装 + 镜像加速全套配置
看了很多教程,大多都是直接给你指令,有些指令甚至都无法使用,从而导致各种问题,下面我将给出最新的Docker安装教程,保证成功。
2026-04-29 19:49:08
290
原创 基于 Redis 实现社交 Feed 流:收件箱模式 + 时间线滚动查询
拉模式(读扩散):用户查询时去拉取关注者的内容 → 优点:存储小;缺点:查询慢、高并发卡顿推模式(写扩散 / 收件箱模式):发布内容时,推送给所有粉丝的收件箱 → 优点:查询极快;缺点:写入压力大推拉结合:大 V 用拉模式,普通用户用推模式本项目选型推模式(收件箱模式),适合中小型社交项目,实现简单、查询性能优异。
2026-04-28 20:31:59
500
原创 秒杀优化-Redis+线程池异步秒杀
异步秒杀 异步秒杀是高并发秒杀场景下的核心优化方案,区别于传统同步下单模式,它将库存扣减、订单创建、消息推送等耗时业务进行异步拆解处理,仅把权限校验、流量限流、库存预扣等核心逻辑同步执行并快速响应前端请求。借助消息队列、线程池等异步手段削峰填谷,有效隔离瞬时爆发的海量流量,避免大量并发请求直接冲击数据库,大幅降低数据库锁竞争与连接压力,在提升接口响应速度、优化用户体验的同时,保障秒杀系统的高并发承载能力、稳定性与容错性,从根本上解决秒杀活动中系统卡顿、崩溃、超卖等常见问题。
2026-04-25 19:58:29
37
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅