如何保证幂等机制

概述

  其实这是一个很常见的问题,做后端开发会经常遇到这个问题,如何保证消息消费不被重复消费,或者说如何保证一个接口多次调用只会产生一种结果,不管调多少次,资源都不会发生改变。如果重复消费了或者调用了,如何保证不造成系统异常。所以幂等机制的核心就是保证资源唯一性。

场景

  需要保证幂等性的场景就是需要限定接口只能调用一次;消息重复消费之后,要保证资源不会发生改变。例如:

  • 支付接口
  • 退款接口
  • 新增数据的接口

思路

  • 利用数据库的唯一索引,针对我们需要约束的资源字段创建唯一索引,可以防止插入重复的数据。需要注意的是,如果是分库分表的情况,唯一索引的情况就不能限制资源数据的唯一性。
  • 可以先根据数据库唯一索引查一下,如果存在,就做更新操作。 这块要注意的是如何避免并发场景(分布式锁)。
  • 如果是直接写 redis,每次都是set,天然就幂等的。
  • 利用 redis 做一层校验,每次调接口或这消费消息之前先查一下 redis 里有没有全局的ID,如果没有消费过,加redis,再处理消息或接口。
-------------本文结束感谢您的阅读-------------
Thank you for your encouragement