第三章 (4)幂等性概念

1年前 ⋅ 1030 阅读

幂等性是什么?

  • 一个操作无论执行多少次,它的结果是一样的
  • 我们可以借鉴数据库的乐观锁机制:
  • 比如我们执行一条更新库存的SQL语句
  • UPDATE table SET count=count - 1,version=version+1 WHERE VERSION = 1

消费端-幂等性保障

  • 在海量订单产生的业务高峰期,如何避免消息的重复消费问题
  • 消费端实现幂等性,就意味着,我们的消息永远不会消费多次,即使我们收到了多条一样的消息
  • 业界主流的幂等性操作:
    • 唯一ID + 指纹码 机制,利用数据库主键去重
    • 利用Redis的原子性去实现

方案1:唯一ID + 指纹码

  • SELECT COUNT(1) FROM T_ORDER WHERE ID = 唯一ID + 指纹码
  • 好处:实现简单
  • 坏处:高并发下有数据库写入的性能瓶颈
  • 解决方案:根据ID进行分库分表进行路由算法

方案2:利用Redis原子特性实现

  • 使用Redis进行幂等,需要考虑的问题
  • 第一:我们是否需要进行数据落库,如果数据落库,关键解决的问题是数据库和缓存如何做到原子性?
  • 第二:如果不进行落库,那么都存储到缓存中,如何设置定时同步策略?

全部评论: 0

    我有话说: