幂等性技术

使用场景

购物下单生成订单

支付扣款

库存扣减

物流发货

解决方案

前端

前端防重

  • RPG模式 :Post Direct Get 重定向到另外一个页面,防止刷新
  • Token机制:
  1. 对业务代码执行和删除token整体加线程锁,其它线程排队阻塞 
  2. 借助单线程redis incr 第一次获取token并incr返回1,如果第二次incr后返回2就是合法请求,如果为其它值,就为非法请求直接返回。  
  3. 最优解  校验删除token,第一次token存入redis,第二次执行业务删除token,如果删除成功就执行业务,如果删除失败就是重复请求   

代码实现

使用幂等性注解 HandlerInterceptor 删除token失败就是重复执行

  • 防重表    增加一张放重表 增加唯一索引  保证并发下只有一条 
  • select + insert  查询是否存在如果存在就insert  无法适用于分库分表适合单表 

悲观锁在使用过程中会出现死锁

A访问表A (锁住A)访问表B B访问表B(锁住B) 访问表A

  • mysql乐观锁

库存扣减并发是因为多线程,一个线程读到了另外一个线程未提交的数据

syncronized +@Transactional并发后还是会有库存减少 syncronized锁定方法对象 、transactional对当前方法增强,动态代理出来一个对象,syncronized和transactional操作的是两个不同的对象

通过版本号进行控制、添加version字段默认为0 ,更新版本号  

基于条件进行控制  

zk分布式锁 

redis分布式锁 

setnx :redis-key-value 只有key不存在才会设置 否则返回0  

expire:过期时间 

delete:删除key 释放锁

MQ消息缓冲区: MQ接收到Producer发送的消息后,不会立即推送给consumer ,而是积攒到一定的数量后进行消息的发送。  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值