摘要:
作为一个长期和关系型数据库(RDBMS)打交道的开发者,初次查阅 Redis 文档时,看到 MULTI、EXEC、DISCARD 这些指令,心中难免涌起一股由于熟悉而带来的安全感。
我们的大脑会自动建立映射:MULTI 就是 BEGIN,EXEC 就是 COMMIT,DISCARD 就是 ROLLBACK。这套组合拳打下来,所有的业务逻辑似乎都应该具备了“不成功便成仁”的原子性保障。
但这恰恰是 Redis 给我上的第一课:相似的命名背后,往往藏着截然不同的灵魂。 当你把 MySQL 的事务观生搬硬套到 Redis 身上时,错付就已经开始了。
这篇文章将带你剥开 Redis 事务的外衣,从“原子性”的定义偏差说起,聊聊为什么在现代开发中,我们越来越倾向于用 Lua 脚本来替代它。 阅读全文
作为一个长期和关系型数据库(RDBMS)打交道的开发者,初次查阅 Redis 文档时,看到 MULTI、EXEC、DISCARD 这些指令,心中难免涌起一股由于熟悉而带来的安全感。
我们的大脑会自动建立映射:MULTI 就是 BEGIN,EXEC 就是 COMMIT,DISCARD 就是 ROLLBACK。这套组合拳打下来,所有的业务逻辑似乎都应该具备了“不成功便成仁”的原子性保障。
但这恰恰是 Redis 给我上的第一课:相似的命名背后,往往藏着截然不同的灵魂。 当你把 MySQL 的事务观生搬硬套到 Redis 身上时,错付就已经开始了。
这篇文章将带你剥开 Redis 事务的外衣,从“原子性”的定义偏差说起,聊聊为什么在现代开发中,我们越来越倾向于用 Lua 脚本来替代它。 阅读全文
posted @ 2026-02-05 09:49
一旅人
阅读(276)
评论(0)
推荐(2)

在上一篇《分布式锁的代价与选择:为什么我们最终拥抱了Redisson?》中,我们聊到了手写 SETNX 的"茹毛饮血"时代。既然选择了 Redisson,就意味着我们已经告别了那些让人提心吊胆的死锁噩梦。
很多时候,我们以为只是调用了一个简单的 lock.lock(),但背后其实是一整套复杂的自动续期、Lua 脚本原子执行和发布订阅机制在默默支撑。
这篇文章不讲虚的,我们从常用的 API 起手,一路通过生产环境的避坑实战,最后钻进底层数据结构与 Lua 源码里,把 Redisson 彻底扒个干干净净。
很多时候,我们从简单方案过渡到复杂方案,并不是因为想炫技,而是在无数次"掉坑"之后,对代码、对线上的敬畏。但同样,在面对过度设计时,也要有敢于说"不"的底气:如果单实例够用,就别搞集群;如果 Redis 够用,就别上 Redlock。
写代码的时候,我们都是站在巨人肩膀上的追梦人。
技术本身没有高低贵贱,能解决问题的就是好技术。不要盲目追求所谓的"最佳实践",在约束下求最优解,才是工程师的智慧。
愿你在技术的道路上,既能仰望星空,也能脚踏实地。
今天,代码又报错了。或者也许是昨天,我不清楚。
不管怎样,Spring 容器抛出了一个 BeanCreationException。为了解决它,我被迫潜入框架的深处,去注视那些平时被 @Autowired 掩盖的齿轮。
在 Spring 的世界里,存在着一种必然的复杂性。这种复杂性并非设计者的恶趣味,而是为了在一个静态的语言中构建动态世界所付出的代价。
在这个庞大的机器中,有三个名字极其相似的概念经常被混淆:BeanFactory、FactoryBean 和 ObjectFactory。这并不是命名的贫瘠,而是它们在本质上确实存在着微妙的纠缠。
今天,我们剥离掉那些花哨的比喻和无用的糖衣,用一种冷静的、近乎解剖学的视角,去审视这三个概念的本质。
如果你翻阅过《阿里巴巴 Java 开发手册》,在 MySQL 数据库规约中,一定见过这条醒目的“红线”:【强制】不得在 database 中使用 ORDER BY RAND() 进行随机排序。
写在前面 "分库分表"大家都不陌生。当数据量激增时,我们习惯性地写下 userId % tableCount 来决定数据路由到哪张表。 这段代码逻辑正确、简单直观。但在对性能要求极高的底层中间件开发中,这真的是最优解吗? 如果我们翻开 JDK 1.8 的 HashMap 源码,会发现大神 Doug
总的来说,AOP 让限流这类“基础设施”悄无声息地融入了业务脉络,这正是优雅架构的魅力所在——将复杂性收敛于一点,在别处换来 simplicity。
最后,想起一句被反复“魔改”的名言,放在这里格外贴切:“让架构的归架构,让业务的归业务”。
愿各位的代码世界,秩序井然,bug 退散。
说实话,MyBatis这玩意儿平时挺好用的,但有时候报的错真让人摸不着头脑。尤其是那种本地跑得好好的,一上线就炸的Bug,简直让人怀疑人生。今天就记录两个让我debug到深夜的坑,它们都有个共同特点:代码看起来完全没问题,但运行时就是莫名其妙地报错。
Spring Boot WebSocket方案终极指南:Netty vs 官方Starter对比与实践
浙公网安备 33010602011771号