- 博客(36)
- 收藏
- 关注
原创 如何应对海量Key带来的redis内存占用问题?
针对Redis内存不足问题,本文提出五种解决方案:1)合并小Key以减少元数据开销和内存碎片;2)临时添加TTL为非关键数据争取优化时间;3)采用集群模式;4)使用RedisonFlash内存+SSD混合架构;5)实施冷热数据分离方案。其中,合并小Key推荐使用Hash结构,冷热分离方案提供MySQL存储全量/冷数据两种模式。最佳方案推荐集群+ROF组合,若预算有限则建议优先合并小Key并实施冷热分离。各类方案均需根据实际业务场景权衡选择。
2025-08-23 17:24:38
998
原创 破局双维度查询难题:淘宝订单ID的用户基因设计奥秘
淘宝订单ID采用"时间序列+订单类型+用户基因段"结构,其中用户基因段(用户ID后6位)是关键创新点。这种设计解决了按用户ID或订单ID查询时的分片难题:既避免全分片扫描,又无需冗余存储。订单ID实质是Snowflake算法的变种,用用户基因替代机器ID,结合布隆过滤器防冲突和盐值哈希增强安全性。系统通过维护基因-用户ID映射表实现反向查询,在保证查询效率的同时兼顾数据安全性和系统扩展性。
2025-08-23 14:00:49
745
原创 优先队列流式处理 + 多路归并排序:轻松实现DB分表严格有序的分页查询
文章摘要:为解决短链接平台在分片数据库环境下实现高效分页查询的难题,提出了两种技术方案。方案一通过建立映射表实现全局排序,但面临存储空间不足的硬性约束;方案二采用流式处理技术,对各分表并行查询后使用优先队列进行多路归并排序,有效控制内存占用并确保严格时序。方案实现了虚拟线程并发查询和恒定内存的流式处理机制,通过限制最大分页尺寸等参数确保系统稳定性,在满足MySQL单一数据库和磁盘空间限制的前提下,解决了跨分片数据排序的性能瓶颈问题。
2025-08-22 23:28:55
723
原创 从业务场景到知名企业开源框架全面解析分布式ID生成方案
本文系统分析了五种分布式ID生成方案及其企业级实现:UUID简单但无序;DB自增性能受限;Segment号段模式通过双Buffer优化性能;Snowflake算法本地生成但存在时钟回拨风险;Redis生成效率高但稳定性差。重点介绍了美团Leaf(支持Segment和Snowflake两种模式)、百度UidGenerator(优化Snowflake)和滴滴Tinyid(改进号段模式)三大开源框架,对比了它们在有序性、性能、容错等方面的特性。
2025-08-22 19:09:22
901
原创 360s→15s:近25倍的性能优化重构十万Excel券码批量导入方案
本文针对10万行Excel优惠券导入耗时360秒的问题,提出优化方案。原方案每行进行2次Redis网络IO,导致20万次请求。优化方案采用Redis管道批处理,每2500行合并3次请求(检查库存、管道写入、扣减库存),配合MQ每5000行异步入库。通过启动时获取进度、库存回滚机制和幂等处理,将网络IO从20万次降至182次,执行时间优化至15-20秒。同时实现错误记录、重试机制和日志监控,在保证数据可靠性的前提下显著提升性能。
2025-08-14 13:37:04
1167
原创 带你轻松学习虚拟线程和StructuredTaskScope
本文详细介绍了JDK21引入的虚拟线程和StructuredTaskScope两大并发编程新特性。虚拟线程作为轻量级用户线程,由JVM管理,具有自动挂起/恢复机制,适用于I/O密集型场景,但需注意载体线程阻塞、ThreadLocal污染等问题。StructuredTaskScope实现结构化并发,通过生命周期绑定和故障策略(ShutdownOnFailure/ShutdownOnSuccess)解决传统并发模型的任务状态无感知和资源清理问题。
2025-08-13 15:32:14
933
原创 基于Spring Security + Redis + JWT的双令牌认证方案的实现
本文提出了一种改进的JWT双令牌认证方案,以解决单令牌方案存在的安全风险。方案采用短时效的访问令牌和长时效的刷新令牌相结合的方式,访问令牌用于API认证,刷新令牌用于维护登录状态。当访问令牌过期时,前端可通过特定接口刷新令牌,同时加入Redis黑名单机制防止令牌滥用。为增强安全性,还引入了分布式锁、刷新次数限制和设备标识码验证等措施。该方案既保证了用户隐私安全,又避免了频繁登录带来的不良体验。
2025-08-12 17:55:59
1058
原创 带你轻松学习并掌握@Transactional的高级用法!
本文介绍了Spring @Transactional注解的高级用法。主要包括:传播行为的7种类型及其适用场景;MySQL四种隔离级别的灵活配置;自定义异常回滚规则;设置事务超时时间;读写权限的规范作用;以及避免类内部自调用导致事务失效的解决方案(通过@Lazy注入代理对象)。这些配置项使开发者能更精细地控制事务行为,满足不同业务场景需求。文章以简洁明了的方式总结了各配置项的语法和适用场景,特别提醒了readOnly属性的实际效果取决于具体技术栈实现。
2025-08-11 20:24:58
291
原创 布隆过滤器因内存上限无法处理超量数据的优化方案
针对布隆过滤器内存不足问题,提出三种优化方案:1)分片布隆过滤器,通过哈希取模分散数据到多个过滤器,但存在单机限制和GC问题;2)分布式布隆过滤器,利用Redis集群存储,支持分布式架构,可通过分片进一步优化;3)可扩展布隆过滤器,动态扩容但保留单机缺陷。建议单机项目采用分片或可扩展方案,分布式系统使用分布式分片方案。每种方案均附代码实现,权衡内存占用与性能表现。
2025-08-11 19:42:04
315
原创 自定义错误码 + 全局异常体系 + Result的优雅实现方案
本文针对大型微服务项目提出了一套完整的错误管理方案。通过分析枚举类与常量类的优劣,推荐采用常量类方案实现错误码管理,因其更适应大规模项目需求。方案包含三个核心部分:1)错误码系统设计,包括接口定义、工厂模式实现、注册中心去重机制;2)异常处理体系,提供基础异常类及多种具体实现;3)统一响应结果封装,支持成功/失败多种场景。该方案具有模块化、可扩展性强、错误码全局唯一等优点,通过静态/动态错误码分离、异常拦截器、结果包装等技术手段,为微服务架构提供了规范化的错误处理机制。
2025-08-11 16:02:10
931
原创 Docker部署的xxl-job执行本地任务时无法连接执行器的解决方案
摘要 Docker部署XXL-JOB时,执行器自动注册会使用Docker内部网络IP导致连接失败。解决方案有两种:1)手动配置执行器IP为宿主机公网IP;2)启动容器时使用--network=host参数共享宿主机网络。修改后执行器即可正常连接。详细配置方法见正文,如有其他问题欢迎留言讨论。(150字)
2025-08-03 18:25:54
499
原创 FastJson日期类无法解析的解决方案
使用Fastjson2时出现日期格式解析问题,前端传入"yyyy-MM-dd HH:mm:ss"格式日期报错。原因在于Spring MVC默认转换器覆盖了Fastjson的转换。提供两种解决方案:1.在字段添加@DateTimeFormat注解指定格式;2.配置全局日期转换器类DateFormatter,实现Formatter接口统一处理Date类型转换。方案一适合部分字段特殊格式,方案二适合全局统一格式。两种方案均需设置GMT+8时区确保时间正确性。
2025-08-01 17:16:46
676
原创 Knife4j未配置却需要登录认证的解决方案
当访问knife4j接口文档时出现登录认证页面,实际是SpringSecurity框架的认证而非knife4j的。解决方案有两种:一是直接去除SpringSecurity依赖;二是在使用SpringSecurity时,通过配置类放行knife4j相关路径(如/doc.html、/webjars/**等),同时禁用CSRF防护。
2025-08-01 15:39:53
265
原创 带你轻松学习JVM
本文系统讲解了Java虚拟机(JVM)的核心原理与优化策略。首先介绍了JVM的基本概念和内存结构,包括虚拟机栈、堆内存、方法区等关键组件的工作原理与常见问题;其次详细解析了垃圾回收机制,包括引用类型、回收算法、分代回收策略及主流垃圾收集器特性对比;然后深入分析了字节码指令的执行原理和类加载机制,包括双亲委派模型和SPI机制;最后探讨了运行期优化技术,如语法糖转化和JIT编译优化。文章还结合实践案例,提供了内存溢出、GC调优等问题的诊断与解决方案,帮助开发者全面掌握JVM底层
2025-07-30 17:16:06
1216
原创 带你轻松学习Redis
文章详细解析了Redis的数据结构实现原理、缓存策略(旁路缓存、双删等)、三大经典问题(雪崩/击穿/穿透)解决方案,以及集群模式(主从复制、哨兵、Cluster分片)和持久化机制(AOF/RDB)。重点探讨了Redis的线程模型(IO多路复用+Reactor)、内存管理策略(惰性删除+淘汰算法)和原子性保障(事务/Lua脚本),并对比了不同方案的优缺点。
2025-07-24 22:13:24
995
原创 带你轻松学习JUC
文章详细解析了线程状态转换、活跃性问题(死锁、活锁、饥饿)、线程安全判断方法(变量分析、线程八锁、逃逸分析),以及AQS、synchronized、ReentrantLock、CAS等核心机制。此外还介绍了CountDownLatch、CyclicBarrier等同步工具,线程池优化策略,以及CopyOnWriteArrayList、ConcurrentHashMap等线程安全集合。最后探讨了两阶段终止、生产者消费者等并发设计模式,以及ThreadLocal的原理和内存泄漏防范。
2025-07-22 21:24:16
1107
原创 带你对比三大主流消息队列RabbitMQ、RocketMQ以及Kafka
本文对比分析了三大主流消息队列RabbitMQ、RocketMQ和Kafka的核心特性与技术实现。从技术选型、吞吐量、延迟、可靠性、有序性、事务一致性、幂等性、消息积压处理、高可用机制、死信处理、存储效率、延迟消息、消息过滤、资源消耗和优先级支持等16个维度进行深入对比。结果表明:RabbitMQ适合低延迟小规模场景,Kafka擅长高吞吐流处理,RocketMQ则在综合性能和可靠性方面表现突出。文章还详细阐释了各MQ的底层实现原理,如RabbitMQ的镜像队列、RocketMQ的CommitLog存储、Ka
2025-07-13 21:06:22
1660
原创 带你轻松学习Kafka
本文系统介绍了Kafka的核心概念、消息流程和特性分析。主要内容包括:1)核心组件如Topic、Partition、Key等;2)消息处理全流程,从生产发送到消费确认;3)突出优势:高吞吐量(顺序写+零拷贝)、高扩展性、高可用性;4)主要局限:全局顺序瓶颈、事务支持弱、低延迟场景适应性差;5)适用场景建议:适合大数据流处理、日志收集等场景,但不适用于强事务或低延迟需求场景。文章还提供了最佳实践建议,如Topic与业务场景一一对应等。
2025-07-13 17:21:20
970
原创 带你轻松学习RocketMQ
摘要: RocketMQ作为分布式消息中间件,核心组件包括NameServer(路由管理)、Broker(消息存储转发)和Topic/Partition(逻辑分类与负载均衡)。其高吞吐量得益于顺序写磁盘、零拷贝技术(mmap+write)和PageCache内存映射。消息流程涵盖生产者发送、Broker存储(CommitLog+ConsumeQueue)、消费者拉取(Tag过滤)及ACK确认。优势包括高可用集群、分布式事务支持、强可靠性保障(持久化+主从同步),但顺序消息在高并发时存在单线程瓶颈。适合电商秒
2025-07-12 21:04:51
1131
原创 带你轻松学习RabbitMQ
RabbitMQ是一种基于AMQP协议的消息中间件,其核心组件包括交换机(负责路由)、队列(存储消息)和绑定键(路由依据)。消息流程分为生产者发送、交换机路由、队列存储、消费者订阅和ACK确认等步骤。RabbitMQ具有生产者消费者解耦、消息零丢失保障、灵活路由、资源隔离和高可用等优点,但存在高吞吐量性能瓶颈和资源占用大的缺点。它适合中小规模实时场景,但不适合大规模高吞吐量应用。
2025-07-12 16:37:57
1079
原创 有关慢查询SQL优化的思路
MySQL慢查询优化指南:从定位到解决 摘要: 本文系统介绍了MySQL慢查询的识别与优化方法。首先解释了慢查询的定义及其危害,详细说明了通过命令行和配置文件两种方式开启慢查询日志的操作步骤。然后重点分析了六大常见慢查询原因:索引问题、SQL语句编写、数据量级、表结构设计、业务逻辑和系统参数设置。针对每种原因提供了具体优化方案,包括合理设置索引、优化SQL写法、分库分表策略、批量处理数据等。最后给出了关键系统参数的推荐配置值,为数据库性能优化提供了全面的解决方案。
2025-07-09 20:25:10
1199
原创 带你轻松学习MySQL的索引、锁、事务以及MVCC
本文详细介绍了MySQL中的索引、锁和事务机制。索引部分解释了B+树结构、聚簇索引与二级索引的区别,以及索引失效的常见场景。锁机制涵盖全局锁、表级锁和行级锁的特性与适用场景。事务部分探讨了ACID特性及其实现原理,包括UndoLog和RedoLog的作用。最后分析了MVCC多版本并发控制的实现方式,以及不同隔离级别下的快照读特性。这些核心技术共同保障了MySQL的数据一致性和并发性能。
2025-07-09 15:17:52
1290
2
原创 带你轻松学习BIO、NIO和AIO三大模型
本文介绍了计算机I/O(输入输出)的三种主要模型:BIO(同步阻塞)、NIO(同步非阻塞)和AIO(异步非阻塞)。BIO为每个连接创建独立线程,简单但资源消耗大;NIO通过通道、缓冲区和选择器实现单线程管理多连接,提高了高并发性能;AIO更进一步采用异步回调机制实现零阻塞。三种模型在阻塞性、同步性和适用场景上各有特点:BIO适合低并发固定连接,NIO适合高并发短连接,AIO则适用于高并发长连接场景。文章通过烧水比喻形象说明了三种模型的本质区别。
2025-07-08 22:36:41
1013
原创 优化:将针对单一日志表的冷热数据分离类改造成通用类
文章介绍了店铺推荐系统中日志数据存储方案的优化过程。原方案将热数据存入Elasticsearch,现改为存储冷数据,并针对代码冗余问题进行重构。通过引入泛型机制实现通用处理类,将固定代码参数化,同时为不同日志类型提供定制化ES处理逻辑。优化后的方案提升了代码复用性,支持多日志表并行处理,并通过线程池提高执行效率。文中详细展示了改进后的代码实现,包括通用日志处理方法、任务创建机制和重试策略等核心功能模块。
2025-06-12 22:29:06
298
原创 优化日志分析店铺推荐方案:用户范围的精确度以及ES与MySQL的查询效率差异
本文针对原有店铺推荐方案的两个核心问题提出优化方案。问题一是用户范围不精确,通过Redis记录用户每月首次进店行为作为登录标识,并统计热点用户(月登录≥14天);问题二是数据处理效率低,改用MySQL存储热数据(建立用户-店铺映射),ES仅作冷备份。方案采用Lua脚本确保原子性操作,并优化了权重计算模型(店铺50%、分类30%、分区20%)。最终实现通过分批并行处理用户日志数据,结合个性化推荐与热门店铺补充机制,显著提升了10万级用户日志场景下的推荐效率和精准度。
2025-06-12 21:50:45
819
原创 116秒→6秒:Redis管道+批处理优化用户好友关系校验的方案
在社交平台中,当用户互相关注时需建立好友关系并写入好友表。但在极端情况下(如插入失败),可能导致好友关系数据不一致。需设计一个定时任务,检查并修复所有用户的好友关系数据。已知用户量约 5 万。
2025-06-12 20:16:19
1123
2
原创 Sharding-JDBC 定时任务 SQL 无响应的解决方案
添加上述代码后,Sharding-JDBC 能够成功获取到所需的类加载器,顺利加载配置并初始化。程序随即恢复正常运行,预期的 SQL 日志和执行结果都能在控制台正确输出。按理说接下来就会打印sql语句以及对应的参数和返回结果,可是代码在执行到这似乎就停下来了,控制台也没有进一步的输出,也没有抛出任何异常,就像。Spring 框架在执行定时任务时,默认使用的是内置的。这确保了线程在执行应用代码时能正确加载所需的类。也就是说当前线程并没有对应的类加载器。中执行sql语句的时候出现了问题。
2025-06-01 15:04:35
400
原创 点餐场景下:分析实现十万级用户日志的店铺推荐方案
有一个类似美团的点餐小程序,平台入驻了大量商家店铺。用户访问店铺时,系统会记录进店日志。在首页设置一个个性化推荐模块,为用户精准推荐4家店铺。每月产生约10万条进店日志数据。请设计实现该需求。
2025-05-30 20:30:04
1251
原创 Java原创项目:仿b站v1.0(附前后端源码及接口文档)
刚好历时两个月,这个项目也终于是完成了。这单纯是一个练手项目,是一个阶段性的总结。在项目推进过程中,我经历了诸多技术层面的迭代优化:数据库表结构前后调整了十余个版本,API接口也从最初规划的60余个扩展至最终100+。由于课业时间限制,许多设计都留下了优化空间——比如在后期引入Redis缓存时,才发现部分接口设计时未充分考虑缓存键的规范性,导致缓存策略实施效果未达预期,也算是一个教训吧。不光如此,service层里也是有很多代码是很粗糙的,不过由于我的水平还不够,暂且就这样吧。
2025-05-11 20:02:36
1920
4
原创 WebSocket连接失败解决方案(前后端联调场景)
然后确保后端 WebSocket 接口路径同样包含项目上下文路径,保持前后端路径一致性。如果还解决不了的并且搜索了很多解决方案都未能解决的,请检查是否是后端版本兼容性的问题!ws://localhost:80/{项目名称}/webSocket/1。在前端的 WebSocket 连接地址中加入项目上下文路径。(请将 {项目名称} 替换为实际部署的上下文路径)
2025-04-07 23:27:18
1065
原创 C++期末大作业:俄罗斯方块(附源码详解及美工素材)
俄罗斯方块相信大家都玩过,本游戏也是采用了经典的俄罗斯方块游戏规则:按方向键← →进行左右移动,↑ 进行方块的顺时针旋转,↓进行方块的迅速下落,消行可获得分数,累计获得一定分数可进入下一关,下落速度也会随之变快。本项目使用的是EasyX图形库。那废话不多说,下面就进行代码实现吧。
2025-03-07 23:15:30
2399
4
原创 有关IDEA中Lombok失效、找不到符号问题的解决方案
例如@Data、@NoArgsConstructor 、@AllArgsConstructor,得自己手动添加getter、setter方法。于是我便在网上寻找方法,发现出现相同问题的远不止我一个人,我将网上提供的解决方案都试了一遍。ps:在指定完版本后记得刷新,并运行一下Maven自带的clean和complie插件。还有@Slf4j,在程序运行时会报找不到符号的错误,导致无法顺利运行程序。我在使用IDEA时发现Lombok失效,很多相关注释无法使用。其原因不详,但在指定版本后以上问题都完美解决。
2025-01-22 19:58:51
809
1
原创 记录:IO流大作业——每日一记
在开始说明项目实现过程之前,让我们先对本次项目主要使用到的IO流进行简单的讲解吧。IO流在 Java 中,IO流(Input/Output streams)用于处理数据的读取和写入。字节流字符流缓冲流转化流对象流打印流压缩流&解压流字节流字节流(Byte Stream)是 Java 中用于处理 所有类型数据(如文本、图片、音频等)的输入输出流。字节流以 字节 为单位进行读取和写入,不会对数据进行编码或解码,因此适用于任何类型的数据。字节流的主要类。
2024-12-25 14:55:02
1132
1
原创 记录:Java阶段性项目(拼图小游戏)
演示如下:这个项目是一个拼图小游戏,这个项目有以下几个部分组成:登录界面注册界面游戏界面而这三个界面的搭建则分别由以下步骤实现:登录界面:界面初始化密码解密功能的实现验证码的生成确认输入正确性功能的实现注册界面和游戏界面的跳转注册界面:界面初始化密码解密功能的实现重置功能的实现记录用户数据确认输入正确性功能的实现返回登录界面功能计时器的实现游戏界面:界面初始化菜单栏初始化拼图的生成以及载入选择图片功能的实现移动图片功能的实现计步器功能的实现胜利条件的判断。
2024-12-05 17:01:56
2518
12
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人