-
我图省事把 Java 枚举的 ordinal 序号存进数据库当状态值、跑了一年风平浪静,直到产品要在枚举中间插一个新状态,我加完一上线数据库里成千上万条记录的状态全错位了、原本是已支付的变成了已取消,排查很久才反应过来 ordinal 是按声明顺序排的我一插队后面全跟着挪了位的深度复盘
我有个订单状态枚举 OrderStatus { CREATED, PAID, SHIPPED, COMPLETED, CANCELLED },存数据库时图省事直接存它的 ordinal()(CREATED=0,PAID=1,SHIPPED=2,COMPLETED=3,CANCELLED=4),读出来用 values()[storedInt] 还原,跑了一年一切正常。直到产品要在已支付之后已发货之前…- 0
- 0
-
一个把数字枚举的值直接存进数据库的设计,在我往枚举中间插了一个新成员后,让所有历史订单的状态集体错位了一格:一次 TypeScript 枚举持久化的深度复盘
订单状态用 TS 数字枚举、状态值以数字存库。某次在'待支付'和'已支付'间插了个'支付中',发布后大量历史订单状态集体往后错位一格——已发货显示成已支付。根因是 TS 数字枚举不显式赋值时值从 0 自动递增、靠声明顺序决定,往中间插成员让后面所有值 +1,而数据库里历史数据存的旧数字没变、代码却用新枚举去解释,含义被悄悄换掉。本文讲透数…- 0
- 0
-
插个枚举值搞乱所有历史数据:TS 数字枚举避坑复盘
这是一个改了一行无害的代码却让历史数据集体错乱的诡异事故,排查时让我惊出一身冷汗。起因小到不能再小:产品要在订单状态里新增一个待审核的状态,我们的订单状态是用 TypeScript 的枚举定义的,我很自然地把这个新状态插进了枚举中间一个语义上最合适的位置,改完测试新功能一切正常就上线了。可第二天客服那边就炸了:大量用户反馈自己历史订单的状态显示全乱了,明明早就已完成的订单变成了已取消,数据像被恶意…- 0
- 0
-
Redis 持久化完全指南:从一次"服务器一重启、Redis 里的数据就少了一大半"看懂 RDB 与 AOF
2022 年我给一个项目做缓存层用的是 Redis。我当时想数据都在内存里万一服务器重启不就全没了所以得开持久化。第一版我做得很省事在 redis.conf 里抄了一行 save 900 1 心想这下数据就落到磁盘上了。本地测试时我特意重启了一次 Redis 数据还在我心里很踏实持久化嘛不就是在配置里开一下数据就落盘永远不会丢了。可等它真正上线扛着真实的流量和真实的意外一串问题冒了出来。第一种最先…- 2
- 0
持久化
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!




