一些常见的场景解决方案(理论版)
- Q:一笔订单,在取消的那一刻用户刚好付款了,怎么办?
- 事务管理:确保订单取消状态更新和付款再数据库方面事务性;
- 订单取消状态延迟处理:可以适当延迟定订单状态更新;
- 再付款时再次确认订单状态;拦截用户付款;
- Q:项目上如何避免出现重复订单?
- 场景分析:出现重复订单,很有可能是用户网络延迟,或者高并发,用户多点了几次;导致订单状态未能及时返回,用户重新发起了订单;导致后端收到了多个请求,但后端其实已经创建了,但是未及时返回结果;这样就导致了重复的订单;
- 使用Token配合Redis:在发起订单前,后端返回一个时效性token,同时以user_id + token 存入redis中,在创建订单时将token携带返回后端,同时redis删除这项token数据;而当同一个订单再次发起时,如果redis中没有该token,说明订单已经被处理,直接拦截;
- 使用分布式锁机制:可以使用redis锁定当前用户,可以用goods_id+user_id作为key,降低锁粒度,确保对于该商品只有一条订单正在处理,处理完成后,删除缓存,而对于此期间的重复订单,拦截处理;【这个方法局限性比较大,缓存的有效期很重要】
----待续----
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!