摘要: Redis 事务的“原子性”迷思:为什么我们最终选择了 Lua 脚本 作为一个长期和关系型数据库(RDBMS)打交道的开发者,初次查阅 Redis 文档时,看到 MULTI、EXEC、DISCARD 这些指令,心中难免涌起一股由于熟悉而带来的安全感。 我们的大脑会自动建立映射:MULTI 就是 BEGIN,EXEC 就是 COMMIT,DISCARD 就是 ROLLBACK。这套组合拳打下来,所有的业务逻辑似乎都应该具备了“不成功便成仁”的原子性保障。 但这恰恰是 Redis 给我上的第一课:相似的命名背后,往往藏着截然不同的灵魂。 当你把 MySQL 的事务观生搬硬套到 Redis 身上时,错付就已经开始了。 这篇文章将带你剥开 Redis 事务的外衣,从“原子性”的定义偏差说起,聊聊为什么在现代开发中,我们越来越倾向于用 Lua 脚本来替代它。 阅读全文
posted @ 2026-02-05 09:49 一旅人 阅读(141) 评论(0) 推荐(2)
摘要: Redisson 使用手册:从 API 误区到看门狗失效,在此终结分布式锁的噩梦 在上一篇《分布式锁的代价与选择:为什么我们最终拥抱了Redisson?》中,我们聊到了手写 SETNX 的"茹毛饮血"时代。既然选择了 Redisson,就意味着我们已经告别了那些让人提心吊胆的死锁噩梦。 很多时候,我们以为只是调用了一个简单的 lock.lock(),但背后其实是一整套复杂的自动续期、Lua 脚本原子执行和发布订阅机制在默默支撑。 这篇文章不讲虚的,我们从常用的 API 起手,一路通过生产环境的避坑实战,最后钻进底层数据结构与 Lua 源码里,把 Redisson 彻底扒个干干净净。 阅读全文
posted @ 2026-02-04 11:49 一旅人 阅读(219) 评论(0) 推荐(0)
摘要: 分布式锁的代价与选择:为什么我们最终拥抱了Redisson? 很多时候,我们从简单方案过渡到复杂方案,并不是因为想炫技,而是在无数次"掉坑"之后,对代码、对线上的敬畏。但同样,在面对过度设计时,也要有敢于说"不"的底气:如果单实例够用,就别搞集群;如果 Redis 够用,就别上 Redlock。 阅读全文
posted @ 2026-01-26 10:13 一旅人 阅读(473) 评论(1) 推荐(3)
摘要: 一个月搞定100+表迁移:我的“偷师”Navicat实战复盘 写代码的时候,我们都是站在巨人肩膀上的追梦人。 技术本身没有高低贵贱,能解决问题的就是好技术。不要盲目追求所谓的"最佳实践",在约束下求最优解,才是工程师的智慧。 愿你在技术的道路上,既能仰望星空,也能脚踏实地。 阅读全文
posted @ 2026-01-22 09:34 一旅人 阅读(1831) 评论(13) 推荐(23)
摘要: Spring 的西西弗斯之石:理解 BeanFactory、FactoryBean 与 ObjectFactory 今天,代码又报错了。或者也许是昨天,我不清楚。 不管怎样,Spring 容器抛出了一个 BeanCreationException。为了解决它,我被迫潜入框架的深处,去注视那些平时被 @Autowired 掩盖的齿轮。 在 Spring 的世界里,存在着一种必然的复杂性。这种复杂性并非设计者的恶趣味,而是为了在一个静态的语言中构建动态世界所付出的代价。 在这个庞大的机器中,有三个名字极其相似的概念经常被混淆:BeanFactory、FactoryBean 和 ObjectFactory。这并不是命名的贫瘠,而是它们在本质上确实存在着微妙的纠缠。 今天,我们剥离掉那些花哨的比喻和无用的糖衣,用一种冷静的、近乎解剖学的视角,去审视这三个概念的本质。 阅读全文
posted @ 2026-01-13 22:46 一旅人 阅读(365) 评论(0) 推荐(3)
摘要: SQL 性能避坑:为什么阿里强制禁用 ORDER BY RAND()? 如果你翻阅过《阿里巴巴 Java 开发手册》,在 MySQL 数据库规约中,一定见过这条醒目的“红线”:【强制】不得在 database 中使用 ORDER BY RAND() 进行随机排序。 阅读全文
posted @ 2026-01-07 14:43 一旅人 阅读(793) 评论(6) 推荐(2)
摘要: 分表路由:为什么大神都用 & (n-1),而不用 % ?一次给你讲透 写在前面 "分库分表"大家都不陌生。当数据量激增时,我们习惯性地写下 userId % tableCount 来决定数据路由到哪张表。 这段代码逻辑正确、简单直观。但在对性能要求极高的底层中间件开发中,这真的是最优解吗? 如果我们翻开 JDK 1.8 的 HashMap 源码,会发现大神 Doug 阅读全文
posted @ 2026-01-05 14:30 一旅人 阅读(565) 评论(0) 推荐(2)
摘要: Spring AOP + Guava RateLimiter:我是如何用注解实现优雅限流的? 总的来说,AOP 让限流这类“基础设施”悄无声息地融入了业务脉络,这正是优雅架构的魅力所在——将复杂性收敛于一点,在别处换来 simplicity。 最后,想起一句被反复“魔改”的名言,放在这里格外贴切:“让架构的归架构,让业务的归业务”。 愿各位的代码世界,秩序井然,bug 退散。 阅读全文
posted @ 2025-12-29 10:01 一旅人 阅读(2536) 评论(4) 推荐(7)
摘要: MyBatis踩坑实录:那些不报错但让你debug到深夜的Bug 说实话,MyBatis这玩意儿平时挺好用的,但有时候报的错真让人摸不着头脑。尤其是那种本地跑得好好的,一上线就炸的Bug,简直让人怀疑人生。今天就记录两个让我debug到深夜的坑,它们都有个共同特点:代码看起来完全没问题,但运行时就是莫名其妙地报错。 阅读全文
posted @ 2025-12-24 09:38 一旅人 阅读(1243) 评论(14) 推荐(18)
摘要: Spring Boot WebSocket方案终极指南:Netty与官方Starter对比与实践 Spring Boot WebSocket方案终极指南:Netty vs 官方Starter对比与实践 阅读全文
posted @ 2025-12-23 13:50 一旅人 阅读(331) 评论(0) 推荐(1)