高并发场景下我们如何保证幂等性?

发布时间:2024-03-15 13:21:47
 

首先普及下幂等的概念“在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。”

那么在我们的实际业务场景中幂等是一个非常高频的场景,比如:

  • 电商场景中用户因网络问题多次点击导致重复下单问题
  • MQ消息队列的重复消费
  • RPC中的超时重试机制
  • 等等

那么我们有那些方案可以解决我们的幂等性问题呢?

  • 数据库唯一主键实现幂等性
    • 其实现方式是使用分布式ID充当主键,不使用MySQL中的自增主键
  • 乐观锁实现幂等性
    • 在表中增加版本号标识,只有版本号标识一直才更新成功
  • 分布式锁
    • 简单来说就是分布式的排他锁,但是我们可以控制锁的粒度以提高程序的执行性能
  • 获取token
    1. 服务端提供获取 Token 的接口,请求前客户端调用接口获取 Token
    2. 然后将该串存入 redis 数据库中,以该 Token 作为 Redis 的键(注意设置过期时间)。
    3. 将 Token 返回到客户端,在执行业务请求带上该 Token
    4. 服务端接收到请求后根据 Token 到 Redis 中查找该 key 是否存在(注意原子性),
    5. 如果存在就将该 key 删除,然后正常执行业务逻辑。如果不存在就抛异常,返回重复提交的错误信息。

 
上一篇 MySQL里有2000w数据Redis中只存20w的数据,如何保证 redis 中的数据都是热点数据?
下一篇 Redis如何保证与数据库的双写一致性

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题