- 博客(107)
- 收藏
- 关注
原创 String.valueOf(id)和id.toString()的区别
String.valueOf()和toString()的主要区别在于对null值的处理:前者安全返回"null",后者会抛出NullPointerException。对于基本数据类型或可能为null的对象,推荐使用String.valueOf()以避免异常。这是一种防御性编程实践,能提高代码健壮性,尤其是在日志记录等场景。只需记住:不确定时优先用String.valueOf(),确保非空时才用toString()。
2025-10-29 13:29:32
339
原创 异步秒杀优化
本文分析了同步秒杀的瓶颈,并提出异步秒杀的优化方案。同步方案存在数据库压力大、响应时间长等问题。异步方案将流程拆分为两个阶段:1)Redis快速处理抢购资格,通过Lua脚本保证原子性,并立即返回结果;2)消息队列异步处理订单创建,实现削峰填谷。相比同步方案,异步方案显著提升了系统吞吐量、响应速度和用户体验,同时降低了数据库压力,是典型的高并发优化思路。
2025-10-27 17:40:14
795
原创 RedissonMultiLock源码解析
RedissonMultiLock通过顺序加锁和失败回滚机制实现分布式锁的原子性操作。核心逻辑包括:1)按List顺序依次获取子锁;2)任一子锁获取失败时立即释放已获锁;3)动态分配总等待时间给每个子锁;4)解锁时采用反向顺序。关键设计点在于严格保持加锁顺序避免死锁,并通过tryLock-rollback模式确保原子性。源码分析表明MultiLock是客户端层面的组合锁实现,依赖良好的编程规范来保证正确性。
2025-10-27 17:07:50
650
原创 Redisson误区
这个问题是 Redis 分布式锁的一个经典“阿喀琉斯之踵”。故障场景复现:客户端 A在Master节点上成功获取了锁。在 Master 将这个锁信息同步到 Slave之前,Master 节点突然崩溃了。哨兵(Sentinel)机制启动,将Slave节点提升为新的Master。此时,新的 Master 节点上根本没有这个锁的信息。客户端 B向新的 Master 请求获取锁成功了。结果:客户端 A 和客户端 B同时持有了同一个资源的锁。锁的互斥性被破坏,可能导致严重的数据不一致。锁类型。
2025-10-27 16:37:01
603
原创 Redisson 的 MultiLock原理
Redisson的MultiLock机制解决了分布式环境下原子性获取多个锁的问题。通过"全部成功或全部失败"的策略,它确保在转账等场景中能同时锁定多个账户。使用时需注意锁的顺序,按字典序获取锁可避免死锁。核心流程包括:顺序尝试加锁、失败时回滚已获取锁、成功时执行业务、最终统一释放。示例展示了银行转账场景中如何正确使用MultiLock,强调了锁顺序的重要性及异常处理机制。
2025-10-27 15:56:38
890
原创 Spring Boot 学习指南(五--下):MyBatis-Plus - MyBatis 的终极进化
MyBatis-Plus - MyBatis 的终极进化
2025-08-03 21:07:09
705
原创 Spring Boot 学习指南(五--上): 多样化数据持久化方案
第 1 小阶段: Spring JDBC 与 Spring Data JPA
2025-08-03 21:04:06
947
原创 Spring Boot 学习指南--第四部分第 3 小阶段: 开发协作效率提升 - 接口文档自动生成
第 3 小阶段: 开发协作效率提升 - 接口文档自动生成
2025-08-03 18:55:17
819
原创 Spring Boot 学习指南--第四部分第 2 小阶段: API 健壮性增强 - 接口参数校验
第四部分第 2 小阶段: API 健壮性增强 - 接口参数校验
2025-08-03 18:46:30
1124
原创 Spring 中注解应用的一个核心原则:注解应该放在最能准确表达其意图的位置
Spring 中注解应用的一个核心原则:注解应该放在最能准确表达其意图的位置
2025-08-02 16:14:48
886
实战:基于Mybatis+JUL+Lombok+Maven的图书管理系统(带单元测试)
2025-07-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1