同一张发票被财务点了六次重试,接口调了六次,账单多了五次,其实每次返回的字段完全一样。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
k = 'ocr:inv:' + md5 + ':' + bill_no r = redis.get(k) if r: return json.loads(r)
前端按钮没有防抖,后端也没按图片内容做幂等,每次请求都透传到识别服务。识别按次计费,重复调用等于重复付钱。这一点先确认清楚,后面就不用反复试。
「识别结果幂等缓存」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
具体做法是,图片内容 md5 加业务单号做幂等键;成功结果缓存七天;前端点击后置灰 直到返回;重复请求直接回缓存并标记 hit。
改完照着核一遍,连续点六次只产生一次计费 后五次响应直接来自缓存。
