并发
文章平均质量分 92
jakeswang
要有一颗奋进的心
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Redis 总出问题?10 类高频坑 + 通俗解法,一篇搞定优化
Redis常见问题与优化方案 摘要:针对Redis使用中的常见问题,本文总结了10类典型场景的优化方案: 1.内存优化:设置自动过期、清理僵尸key、合理淘汰策略 2.CPU优化:禁用慢命令、主从分离、关闭非必要功能 3.大key处理:拆分key、使用unlink删除 4.模糊查询:使用scan代替keys 5.持久化平衡:合理配置RDB/AOF参数 6.主从同步:设置写入条件避免脑裂 7.集群扩展:分槽存储扩容方案 8.缓存问题:应对穿透、击穿、雪崩的方案 9.监控优先:先分析再优化 10.简单优先:先尝原创 2025-11-14 15:07:04 · 739 阅读 · 0 评论 -
十万qps也就洒洒水实战-本地缓存和布隆过滤器神兵利器
本文分享了作者在负责高并发系统时应对十万级QPS的实战经验。通过地图导航业务场景,详细介绍了系统架构设计、数据库选型(选择HBase)及性能优化过程。重点解决了读放大问题,采用"大布隆+小布隆"过滤器的创新方案降低数据库压力,并通过本地缓存解决节假日热点问题。文章强调技术方案需结合实际业务场景,深入理解技术细节才能有效应对高并发挑战,而非单纯背诵八股文。作者用亲身经历证明十万QPS并非噱头,合理的缓存设计对业务稳定性至关重要。原创 2025-09-12 06:00:00 · 1034 阅读 · 0 评论 -
当 Redis 存储 2 亿个 key,如何精准定位 20w 个含特定后缀的目标?
【Redis海量数据筛选方案】在处理2亿个key中筛选20w特定后缀key时,KEYS命令因全量遍历会导致服务阻塞,严禁生产使用。推荐方案:1)使用SCAN命令配合游标分批扫描,通过MATCH匹配后缀和COUNT控制批次,实现非阻塞查询;2)高频需求建议采用Set集合构建索引,写入时同步维护索引集合;3)低频离线操作可在从节点执行。架构层面优化优先考虑事前索引,避免事后全量扫描。SCAN方案示例代码展示了安全的分批扫描实现方式。原创 2025-09-11 06:30:00 · 1742 阅读 · 0 评论 -
线上频繁FullGC?慌得一比!竟是Log4j2的这个“特性”惹得祸
本文记录了一次线上频繁FullGC问题的排查过程。系统在升级后出现每分钟超过5次FullGC的异常情况,通过分析GC日志和内存快照,发现是由于Log4j2配置不当和JVM参数设置问题共同导致。根本原因是系统误引入Servlet依赖,导致Log4j2线程缓存失效,每次日志打印都创建2MB的StringBuilder对象,加上JVM参数"-XX:PretenureSizeThreshold=2097152"的设置使这些大对象直接进入老年代,快速填满老年代空间。解决方案包括调整Log4j2配置原创 2025-09-10 16:10:41 · 1390 阅读 · 0 评论 -
Redis 不只是缓存!Java 打工人必知的 10 个真实工作场景
本文分享了10个Redis在Java项目中的实用场景:1)限流防崩,2)分布式锁防重复订单,3)延时任务处理超时订单,4)实时热点数据统计,5)异步消息队列,6)全局唯一ID生成,7)用户在线状态管理,8)防重提交,9)会话存储,10)秒杀库存预减。这些方案能有效应对高并发、数据一致性等问题,提升系统性能和用户体验。Redis适合数据量不大但访问频繁的场景,对于大数据量仍需专业解决方案。原创 2025-09-10 15:45:41 · 886 阅读 · 0 评论 -
Redisson分布式锁深度解析:加锁/解锁的底层机制与源码级实现
Redis分布式锁实现原理:通过Hash结构存储锁名、线程标识和重入次数,Lua脚本保证原子性操作。加锁时自动续期(看门狗机制),解锁时递减计数并通知等待线程。支持可重入和公平锁(ZSET排队)。核心特性包括原子性操作、自动续期和线程安全,确保分布式环境下锁的可靠性和高效性。原创 2025-09-11 06:00:00 · 437 阅读 · 0 评论 -
细说分布式ID
本文探讨了分布式ID生成方案,对比分析了MySQL自增ID和UUID作为主键的优劣,指出自增ID顺序写入性能高但依赖数据库,UUID随机写入效率低。重点介绍了基于Snowflake算法的改进方案:美团Leaf通过Zookeeper分配workerId并解决时钟回拨问题;百度UidGenerator采用原子自增时间戳和预生成缓存环提升性能。文章最后总结了各方案特点,为高并发场景下的分布式ID生成提供了技术参考。原创 2025-09-07 19:38:06 · 1020 阅读 · 0 评论 -
应用缓存不止是Redis!——亿级流量系统架构设计系列
本文深入探讨了缓存技术的核心原理与应用实践。从缓存基础概念到多级架构设计,详细解析了命中率、回收策略等关键指标,对比了Guava、Ehcache等主流框架特性。通过Cache-Aside、Read-Through等典型模式分析,结合NULL缓存、双删策略等高级技巧,提供了完整的缓存解决方案。文章还针对穿透、击穿、雪崩三大问题给出防护措施,并探讨了堆外缓存等性能优化方案,为构建高性能系统提供了实用指南。最后强调需根据业务场景选择合适策略,实现缓存效果最大化。原创 2025-08-19 19:41:18 · 1358 阅读 · 0 评论 -
Kafka之所以能抗住亿级并发
Kafka凭借分布式架构和极致优化实现亿级并发:1)分区化设计实现并行读写,集群动态扩容;2)顺序I/O+零拷贝技术突破磁盘瓶颈,吞吐接近内存速度;3)批处理与压缩提升有效传输效率;4)副本机制保障高可用。核心通过分区并行、高效I/O、批处理压缩三大技术协同,配合合理配置与硬件资源(SSD/大内存/高速网络),实现超高性能。其设计精髓在于将分布式架构优势与单机性能压榨完美结合。原创 2025-08-19 19:39:43 · 905 阅读 · 0 评论 -
Java线程池基础一网打尽:从Executors工具类到CPU与IO线程池的区别与选择
决策维度说明推荐实践任务紧迫度是否允许任务被延迟执行紧迫性任务建议使用专属线程池,非紧迫任务可使用共享线程池- 紧迫性任务对响应时间敏感,必须尽快执行如接口响应、同步业务主流程- 非紧迫性任务对时效要求不高,只需最终完成如日志上报、异步通知结果敏感度是否需要获取任务执行结果区分(敏感)与execute(不敏感)- 结果敏感性任务提交后需获取结果,结果影响主流程需精细化控制线程资源,防止结果超时- 结果不敏感任务只需执行,不关心结果可交由复用线程池或后台异步处理。原创 2025-08-08 15:21:33 · 927 阅读 · 0 评论 -
订单服务调用时间从200ms飙升至1.5s,如何排查?
摘要:某电商平台在大促期间因网关限流导致订单服务异常,虽然CPU和内存使用率正常,但接口响应时间骤增。排查步骤包括:1)检查线程栈状态,识别阻塞/等待线程;2)分析依赖服务性能(数据库慢查询、下游RT);3)监控JVM垃圾回收情况;4)诊断网络与连接池问题;5)分析日志链中的超时和重试记录。常见根因包括数据库锁竞争、连接池耗尽或GC频繁。建议采用线程池隔离、降级策略和全链路压测预防类似问题。原创 2025-08-07 15:53:50 · 904 阅读 · 0 评论 -
CPU飙升100%如何排查
摘要:CPU飙升100%是Java应用中常见问题,可通过jstack和arthas工具快速定位。解决步骤:1)使用top命令找到高CPU进程;2)用jstack获取线程堆栈,将线程ID转换为16进制后匹配定位问题代码;3)分析RUNNABLE状态的线程调用栈,常见死循环、锁竞争等问题。arthas提供dashboard和thread命令简化排查。案例表明,死循环问题通常显示固定代码位置,锁竞争则呈现多线程BLOCKED状态。建议保存堆栈快照优先于重启,并建立监控预警机制。该方法能在15分钟内解决90%的CP原创 2025-08-07 15:52:32 · 1306 阅读 · 0 评论 -
高性能可伸缩架构-负载均衡
负载均衡相关原创 2025-05-02 07:30:00 · 777 阅读 · 0 评论 -
高性能架构设计-高性能缓存
缓存提升性能的幅度,不只取决于存储介质的速度,还取决于缓存命中率。为了提高命中 率,缓存会基于时间、空间两个维度更新数据。在时间上可以采用 LRU、FIFO 等算法淘汰 数据,而在空间上则可以预读、合并连续的数据。如果只是简单地选择最流行的缓存管理 算法,就很容易忽略业务特性,从而导致缓存性能的下降。原创 2025-05-01 07:15:00 · 2651 阅读 · 0 评论 -
深入理解分布式缓存 以及Redis 实现缓存更新通知方案
分布式缓存:指将应用系统和缓存组件进行分离的缓存机制,这样多个应用系统就可以共享一套缓存数据了,它的特点是共享缓存服务和可集群部署,为缓存系统提供了高可用的运行环境,以及缓存共享的程序运行机制。轻量级实时通知:选择Pub/Sub,代码简单,适合对可靠性要求不高的场景(如社交动态更新)。高可靠消息队列:选择,适合订单状态同步、库存扣减等关键业务。扩展方案:若需严格保证缓存与数据库一致性,可结合MySQL Binlog 监听(如 Canal)同步到 Redis。原创 2025-04-18 15:06:43 · 1259 阅读 · 0 评论 -
网站高可用架构设计—服务接口高可用
服务接口的高可用设计原创 2025-04-18 15:02:49 · 1078 阅读 · 0 评论 -
Seata方案详细
Seata 通过灵活的四种模式(AT、TCC、Saga、XA)覆盖了分布式事务的不同需求,结合 TC 的统一协调,实现了事务的高可用与易用性。原创 2025-04-17 17:29:18 · 1198 阅读 · 0 评论 -
分布式事务解决方案—本地消息表
本地消息表方案通过结合本地事务与异步消息,在保证可靠性的同时实现系统解耦,是分布式事务中平衡复杂度与一致性的优选方案。实际应用中需结合业务场景,合理设计消息表结构、重试策略及补偿机制,以确保系统的最终一致性和高可用性。(1)本地消息表通过在数据库中维护一张专门的消息表来管理与外部系统的交互状态更新,由于消息表的写入是与业务操作同在一个本地事务中完成的,天然具有同时成功和同时失败的特性。原创 2025-04-17 14:11:20 · 1947 阅读 · 0 评论 -
都在建议你不要直接使用 @Async 注解,为什么?
同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕;而是继续执行下面的流程。例如, 在某个调用中,需要顺序调用 A, B, C三个过程方法;如他们都是同步调用,则需要将他们都顺序执行完毕之后,方算作过程执行完毕;如B为一个异步的调用方法,则在执行完A之后,调用B,并不等待B完成,而是执行开始调用C,待C执行完毕之后,就意味着这个过程执行完毕了。原创 2025-04-15 06:45:00 · 851 阅读 · 0 评论 -
HTTP/2协议下流量大量增加问题剖析
由于HTTP/2协议在多路复用、二进制分帧、头部压缩以及Server Push等各方面的好处,各大互联网公司都陆续将网络协议升级到HTTP/2。喜马拉雅从今年上半年开始启动了升级协议的工作,首期打算升级部分和业务非强相关的上报日志域名。在我们打开该域名协议升级开关后,高峰期这个域名的出口流量居然接近成倍上升,于是紧急关闭了协议升级。原创 2025-04-12 06:15:00 · 1230 阅读 · 0 评论 -
喜马拉雅自研网关架构演化
网关已经是一个互联网公司的标配,这里总结实践过程中的一些心得和体会,希望给大家一些参考以及一些问题的解决思路,我们也还在不断完善中,同时平台架构也在做多活,稳定性等富有挑战性的项目,感兴趣的同学可以加入我们平台架构。还没加入喜马拉雅的小伙伴,欢迎扫描下方的二维码,选择感兴趣的岗位并投递简历,我们期待与您共同攀上人生的高峰。原创 2025-04-11 07:30:00 · 1916 阅读 · 0 评论 -
数据库主从库一致性问题深度解析与解决方案
数据库主从架构是提高系统可用性和读取性能的常见方案,但主从同步带来的数据一致性问题不容忽视。以下是主从一致性的全面分析及解决方案。原创 2025-04-08 06:30:00 · 1175 阅读 · 0 评论 -
快速解决 Java 服务 CPU 过高问题指南
通过以上方法,可以快速定位大多数Java服务CPU过高的问题原创 2025-04-05 05:30:00 · 1417 阅读 · 0 评论 -
快速解决 Java 内存泄漏问题指南
通过本文的详细分析,我们展示了一套完整的内存泄漏检测与优化方法。从获取内存快照、使用专业工具进行深入分析,到通过代码优化和确保垃圾回收正常工作,我们提供了一个系统化的解决方案。希望通过这篇博客,您能够更高效地诊断并解决 Java 应用中的内存泄漏问题,提升应用的稳定性和性能。原创 2025-04-05 07:00:00 · 1946 阅读 · 0 评论 -
并行利器CompletableFuture功能用法安利
并行利器CompletableFuture功能用法安利原创 2025-04-03 09:43:10 · 920 阅读 · 0 评论 -
分布式ID服务实现全面解析
分布式ID生成器是分布式系统中的关键基础设施,用于在分布式环境下生成全局唯一的标识符。以下是各种实现方案的深度解析和最佳实践。原创 2025-03-29 08:38:30 · 864 阅读 · 0 评论 -
Redis 分布式锁实现深度解析
Redis 分布式锁是分布式系统中协调多进程/服务对共享资源访问的核心机制。以下从基础概念到高级实现进行全面剖析。原创 2025-03-28 09:58:23 · 1022 阅读 · 0 评论 -
Redisson分布式锁深度解析:原理与实现机制
Redisson作为Redis Java客户端中的分布式解决方案佼佼者,其分布式锁实现被广泛应用于生产环境。以下从底层设计到源码实现进行全面剖析。原创 2025-03-28 09:56:54 · 787 阅读 · 0 评论 -
newCachedThreadPool, newFixedThreadPool, newScheduledThreadPool ,newSingleThreadExecutor 用法
java线程池:Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持...原创 2020-01-08 19:55:38 · 380 阅读 · 0 评论 -
Java并发容器大合集
概述java.util包中的大部分容器都是非线程安全的,若要在多线程中使用容器,你可以使用Collections提供的包装函数:synchronizedXXX,将普通容器变成线程安全的容器。但该方法仅仅是简单地给容器使用同步,效率很低。因此并发大师Doug Lea提供了java.util.concurrent包,提供高效的并发容器。并且为了保持与普通的容器的接口一致性,仍然使用u...原创 2020-01-08 19:36:38 · 233 阅读 · 0 评论
分享