电商系统的简单设计

news/2024/12/24 7:09:04/文章来源:https://www.cnblogs.com/leecoder5/p/18420802

订单模块

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

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

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

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

支付模块

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

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

商品模块

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

可优化点

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

写在最后

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799925.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

限流器的实践

背景 我们有一个业务场景是给学生发布考试,发布的过程不复杂,就是一个老师传递一些考试相关的参数过来,服务器自动给所有学生生成一份任务,但是在学生上交的时候会有个问题,就是成百上千的学生一起上交,会有并发流量的问题。 这里由于我们的考试可能会设计多个班级的联考…

易优cms 数据库连接失败,如何重新进行正确配置

当你遇到易优CMS(EyouCMS)数据库连接失败的问题时,可以按照以下步骤进行正确的配置和故障排除。 1. 检查数据库配置文件 易优CMS的数据库配置文件位于 application/database.php。你需要检查并修改该文件中的数据库配置信息。 2. 核对数据库账号和密码 确保数据库账号和密码…

在Windows10中使用rust的diesel库

介绍 最近在学习Actix Web时,需要用到数据库操作,简单尝试了一下diesel,也遇到了一些问题。在这里记录一下,供大家参考。 1.安装 根据Diesel官网介绍,使用cargo binstall安装diesel cli。 cargo binstall diesel_cli如果报错 error: no such command: `binstall` 需要先安…

易优eyoucms网站无法安装,数据库文件版本号(无)与CMS源码版本号(v1.3.1)不一致,点击查看!

解决方法比较简单, 可以找历史版本, 使用同版本数据库或者源码进行安装, 安装完成后操作升级。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处…

易优eyoucms网站添加自定义新建字段的时候报错

根据提供的错误信息 SQLSTATE[42000]: Syntax error or access violation: 1118 Row size too large. The maximum row size for the used table type not counting BLOBs is 65535. You have to change some columns to TEXT or BLOBs,这个错误表明数据库表的行大小超过了 My…

易优eyoucms网站下载的系统导入就数据库出问题了,如何升级数据库?

数据库版本需要一样 数据库有新建模型的 需要打补丁包再导入扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、…

易优eyoucms网站登录报错:Array and string offset access syntax with curly braces is deprecated

根据提供的错误信息 Array and string offset access syntax with curly braces is deprecated,这个错误提示表明当前使用的 PHP 版本不支持使用大括号 {} 来访问数组和字符串偏移量。这种语法在 PHP 7.4 之后被标记为已弃用。 以下是一些可能的解决步骤: 1. 切换 PHP 版本 尝…

易优eyoucms网站报错,\\core\\library\\think\\db\\Connection.php

报错 \\\\core\\\\library\\\\think\\\\db\\\\Connection.php 第 380 行左右 数据表或视图不存在,请联系技术处理。[错误代码] SQLSTATE[42S02]: Base table or view not found: 1146 Table eyoucms.ey_channeltype doesnt exist 根据提供的错误信息 SQLSTATE[42S02]: Base ta…

高等数学 3.3 泰勒公式

泰勒(Taylor)中值定理1 如果函数 \(f(x)\) 在 \(x_0\) 处具有 \(n\) 阶导数,那么存在 \(x_0\) 的一个邻域,对于该领域内的任一 \(x\) ,有 \[f(x) = f(x_0) + f^{}(x_0)(x - x_0) + \cfrac{f^{}(x_0)}{2!}(x - x_0)^2 + \cdots + \cfrac{f^{(n)}(x_0)}{n!}(x - x_0)^n + R_…

腾讯云TDSQL数据库认证值得考吗?来看看TDSQL证书有什么用

国内市场上的数据库产品有不少,很多大企业都有自己的数据库产品,比如金仓的KingBase、华为的OpenGauss、阿里云的PolarDB、达梦DM数据库等等,腾讯云也有自己的数据库产品,叫做TDSQL数据库,TDSQL数据库有两个分支:基于MySQL版 + 基于PostgreSQL版。腾讯云是国内知名的云平…

Maximum execution time of 30 seconds exceeded

遇到 Maximum execution time of 30 seconds exceeded 这个错误,通常是因为 PHP 脚本执行时间超过了设定的最大执行时间限制。这可能是由于脚本执行了耗时的操作,例如长时间的数据库查询或其他资源密集型任务。 以下是一些解决步骤: 1. 增加最大执行时间限制 可以在 PHP 配置…

易优eyoucms网站报错 \core\library\think\db\Connection.php 第 307 行左右,SQLSTATE[HY000] [1045]访问被拒,这样的情况要怎么处理啊

根据提供的错误信息 SQLSTATE[HY000] [1045] Access denied for user cs2021@localhost (using password: YES),这个错误表明数据库访问被拒绝了,通常是因为用户名或密码不正确导致的。 以下是几个可能的解决步骤:检查数据库连接配置:确认数据库连接配置文件中的用户名和密…