代码拉取完成,页面将自动刷新
dailyfresh是基于python的django框架并采用B2C方式开发的一款购物商城项目。
1. 语言:Python3.* (Django)
2. 数据库: MySql、 redis
3. 任务队列(异步处理): celery(django-celery)
4. 分布式文件存储: FastDFS
5. 搜索引擎(商品检索): haystack(django-haystack)、whoosh、二次开发
6. web服务器配置: Nginx+ uwsgi
7. 开发环境: PyCharm、Linux、vim
开发架构
Browser/Server(浏览器/服务器)结构
Nginx+uwsgi
1. 用户模块
2. 商品相关模块
3. 购物车相关模块
4. 订单相关模块
1. SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。
【简单来说,属性值、特性相同的商品就可以称为一个SPU】
例如,华为手机可以是一个SPU,小米手机也可以是一个SPU,这个与商家无关,与颜色、款式、套餐也无关。
2. SKU库存进出计量的单位, 可以是以件、盒、托盘等为单位,在服装、鞋类商品中使用最多最普遍。
例如,衣服中一个SKU,通常表示:规格、颜色、款式。
案例1:用户注册发激活邮件时,可能发送邮件所需的时间较长,客户端会需要等待,用户体验不好。
案例2:用户访问量过大时,每次都需要从数据库动态获取首页页面数据,数据库查询次数较多,也要考虑到DDOS攻击。
改进: 把耗时的任务放到后台异步执行,此处使用celery任务队列, 其中使用redis作中间件。
问题一:用户注册发激活邮件时,可能发送邮件所需的时间较长,客户端会需要等待一段时间,体验感不好。怎么优化呢?
答:
可以将耗时的发送邮件任务放到后台异步执行,交给Celery任务队列处理。 使用Redis作为中间件,监听任务队列,交给Worker执行。
问题二:Django框架本身内置的文件存储只能存放小文件,不能解决项目的海量图片存储。应该怎么处理呢?
答:
引入FastDFS+Nginx对商品图片进行存储和调度。FastDFS 是C编写的一款开源分布式文件系统。
充分考虑了冗余备份、负载均衡、线性扩容等机制。使用 FastDFS 很方便搭建一套高性能的文件服务器集群,提供文件上传下载等服务。
问题三:开发过程中,用户的浏览记录和用户购物车商品信息如何存储,以什么格式存储呢?
答:
Redis存储用户历史浏览记录, 采用list数据结构,例如: history_userId: [skuid1,skuid2,skuid3];
存储用户购物车商品信息,采用hash数据结构,例如:cart_userid: {'sku_id1': num, 'sku_id2': num}。
问题四:用户访问量过大时,每次都需要从数据库动态获取首页页面数据,数据库查询次数较多,考虑到DDOS攻击,怎么解决呢?
答:
可以把首页第一次查询的数据在Redis缓存存储。当用户再次查询这些数据时,先从缓存中获取,如获取不到,再去查询数据库,减少数据库的查询次数。
问题五:订单并发处理
答:
可以进行加锁处理,悲观锁首先对数据进行了定位和加锁,再去获取数据。其他事务要想获取锁,必须等原事件结束。
乐观锁在进行操作时不会加锁,提交更正时才进行判断。所以,在本项目并发冲突比较少的场景,可以引入乐观锁。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。