在synchronized 锁住方法的情况下,竟然出现了脏写
Tips
昨天本来打算是准备着一支烟 一杯咖啡 一个bug写一天的,突然我们组长跟我们说线上环境报错了,
还出现了"服务器异常,请联系管理员"
这特么不是一级事故吗?虽然有测试再前面扛枪。但是是我负责的直播模块,心理慌的一批(ps 报错图当时没保存了)
分析事故原因
因为是报错(因为我做这条数据查询的时候是selectOne 所以会报出现了sql异常) 原因到是很快找到了 数据库出现了脏写如图:
我负责的是直播模块 其中的一个业务是直播结束后第三方会通知我去拉取直播的回放,
但是这个回放有可能一条,也有可能是多条,但是我们的业务要求是只需要保存一条直播回放所以我这会做如下操作:
我再做插入之前我会做一个校验,并且我还加了一个方法级别的锁