首页 > 其他分享 >电商系统的简单设计

电商系统的简单设计

时间:2024-09-19 16:01:58浏览次数:1  
标签:下单 支付 订单号 订单 模块 简单 设计 电商

订单模块

作为电商系统,首入眼帘的就是订单模块,也是电商基础的模块之一。订单流程包含了订单从下单到完成的整个流程,订单的状态如下:

  1. 这里迎来了第一个问题,可以看到订单状态有非常多种,如果用if else去做判断,逻辑会非常多,这时候就需要用到状态机模式了,状态机如何使用我这里不细讲,可以自行去百度。

  2. 作为订单系统,订单的幂等性当然也非常重要,那么怎么做到订单的幂等性呢?

  • 首先,前端向后端会申请一个订单号
  • 后端同时把订单号放入redis缓存
  • 用户提交订单,这里前端先把提交按钮置灰,减少一些不必要的麻烦。后端接收到请求,先去redis查询订单号是否存在,如果存在,说明是首次下单,那么删除redis中的订单号,继续往下走下单流程,如果不存在,说明是重复下单,可以友好提示用户
  1. 订单号的生成规则是怎么样的呢?
    订单号当然也是越短越好,我们可以用下单渠道+业务类型+时间信息+用户ID的组合来设计,当然如果想加密一下也是可以的。

支付模块

作为电商系统的重要模块之一,支付的设计也尤为重要,但是目前我们的支付大多数都是去对接支付宝,微信和银联,所以不需要考虑他们的安全性问题,我们只要做好我们的支付系统即可。
这里也会涉及到支付幂等性的问题

  • 一种方式是采用上面解决订单幂等性的方式
  • 还有一种方式是在数据库里加唯一索引,用户ID+订单号+支付状态建立唯一索引,保证当前用户一个订单只能支付一次

商品模块

商品模块无非就是查询,所以我们的目的就是要提供快速的低延迟查询。这里用到的技术可以很多,利用缓存,ES,请求合并等技术,后续如果还不够,做集群扩容,你能想到的增加TPS的手段都可以用上,但是技术是一步步迭代的,我不建议一开始就过多的设计,还是要以当前用户量来考虑和设计。

可优化点

在进行关键业务处理的时候(比如订单数据,交易金额),保证select数据是当前最新数据,且你执行完,再执行其他update类型sql,可以在select for update语句(但是不要滥用,只对单条数据使用,且需要有索引,不然行锁会变表锁)。这样做的好处是,让公共表的多方修改事务排队,一个事务查询执行完了,再执行下一个事务的查询更新;

写在最后

我这里写的不是很全,肯定无法包含电商所有的技术点,后续我想到一点会补一点。类似于秒杀活动这些我后期会专门出一期来讲解。

标签:下单,支付,订单号,订单,模块,简单,设计,电商
From: https://www.cnblogs.com/leecoder5/p/18420802

相关文章

  • 单例模式 (Singleton Pattern) - 设计模式精讲·面试必备
    前言最近整理了一份设计模式手册:从入门到精通的实用指南。坦白说,我对网上那些过于理论化的教程感到有些失望。于是决定亲自动手,从基础概念到实际应用,把常用的设计模式都梳理了一遍。每种模式不仅包含核心原理,还附带了真实的代码示例,希望能帮助大家更好地理解和运用......
  • 全网最简单ubuntu18.04+mysql5.7+nginx+uwsgi一次性部署Django!!!!!
    ubuntu18.04,自带python3.6,mysql5.7 Nginx*******************************1.安装nginx apt-getupdate apt-getupgrade apt-getinstallnginx 2.修改端口为81(可选),是一个链接 /etc/nginx/sites-enabled/default3.servicenginxreload4.servicenginx......
  • Jmeter的简单使用一:http请求
    1、创建线程组setUp和tearDown线程组类似测试用例的测试开始之前执行某些初始化操作,如环境准备、数据库连接和释放数据库连接2、设置线程组Ramp-Up时间(以秒为单位)是指从开始到所有线程都达到活动状态的时间。例如,如果你设置了10个线程,并且Ramp-Up时间为20秒,那么JMeter会在20秒......
  • springboot 博客交流平台-计算机毕业设计源码56406
    摘要博客交流平台作为一种重要的网络平台,为用户提供了展示自我、分享经验和与他人互动的空间。在国内外,研究者们关注博客交流平台的各个方面,并取得了显著的进展。研究内容主要包括用户体验和界面设计、社交化和互动性、多媒体内容支持、移动设备适配和跨平台体验、数据分析......
  • 基于nodejs+vue华阳大众汽车售卖系统[程序+论文+开题] 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着汽车市场的日益繁荣与消费者需求的多元化,汽车售卖系统已成为连接汽车制造商、经销商与终端用户的关键桥梁。华阳大众汽车作为知名汽车品牌,其市场影响力......
  • 基于nodejs+vue滑雪场管理系统[程序+论文+开题] 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着冬季运动的日益普及,滑雪场作为冰雪运动的重要载体,其管理与运营效率直接关系到游客体验、安全保障及经济效益。然而,传统的人工管理模式在面对大规模游客......
  • 基于nodejs+vue滑雪管理系统[程序+论文+开题] 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着冬季运动的兴起,滑雪作为一项集休闲、健身与竞技于一体的运动,在全球范围内受到了广泛的欢迎与追捧。然而,传统滑雪管理方式往往依赖于人工操作,存在效率低......
  • 【微处理器系统原理与应用设计第十四讲】通用同/异步收发器USART中断模式应用设计
    一、功能需求实现远程串行通信数据的回传确认。微处理器系统构成的测控设备通过USART(串口)与用户设备(上位机)相连。上位机每次发送一个字符后等待测控设备将收到的字符回传到上位机。对于测控设备而言,提供一种回传功能,即收到一个字符就立刻发送出去。二、设计思路管脚PA2和PA3......
  • 【微处理器系统原理与应用设计第十三讲】通用同/异步收发器USART轮询模式应用设计
    USART提供两设备之间的串行双工通信,并支持中断和DMA工作。采用轮询、中断和DMA三种方式进行数据收发。一、功能需求实现远程串行通信数据的回传确认。微处理器系统构成的测控设备通过USART(串口)与用户设备(上位机)相连。上位机每次发送一个字符后等待测控设备将收到的字符回传到......
  • LangChain4j炸裂!Java开发者打造AI应用从未如此简单
    LangChain4j的目标是简化将大语言模型(LLM)集成到Java应用程序中的过程。1实现方式1.1标准化APILLM提供商(如OpenAI或GoogleVertexAI)和向量嵌入存储(如Pinecone或Milvus)使用专有API。LangChain4j提供了标准化API,避免了每次都需要学习和实现特定API的麻烦。要试......