一些常见的场景解决方案(理论版)

  • Q:一笔订单,在取消的那一刻用户刚好付款了,怎么办?
    • 事务管理:确保订单取消状态更新和付款再数据库方面事务性;
    • 订单取消状态延迟处理:可以适当延迟定订单状态更新;
    • 再付款时再次确认订单状态;拦截用户付款;
  • Q:项目上如何避免出现重复订单?
    • 场景分析:出现重复订单,很有可能是用户网络延迟,或者高并发,用户多点了几次;导致订单状态未能及时返回,用户重新发起了订单;导致后端收到了多个请求,但后端其实已经创建了,但是未及时返回结果;这样就导致了重复的订单;
    • 使用Token配合Redis:在发起订单前,后端返回一个时效性token,同时以user_id + token 存入redis中,在创建订单时将token携带返回后端,同时redis删除这项token数据;而当同一个订单再次发起时,如果redis中没有该token,说明订单已经被处理,直接拦截;
    • 使用分布式锁机制:可以使用redis锁定当前用户,可以用goods_id+user_id作为key,降低锁粒度,确保对于该商品只有一条订单正在处理,处理完成后,删除缓存,而对于此期间的重复订单,拦截处理;【这个方法局限性比较大,缓存的有效期很重要】

----待续----

posted @   乐可乐  阅读(107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示