1. 项目背景与技术选型
宠物电商平台作为垂直领域的细分市场,近年来呈现爆发式增长。根据《2023年中国宠物行业白皮书》显示,线上宠物用品交易规模已突破千亿元,年增长率保持在25%以上。这种背景下,开发一个稳定可靠的宠物商城系统具有明确的市场价值。
技术栈选择上,我们采用SpringBoot+Vue的前后端分离架构。SpringBoot 2.7.x版本提供了完善的电商系统开发支持:
- 内置Tomcat容器简化部署
- Starter依赖自动配置省去XML繁琐配置
- Actuator端点方便监控系统健康状态
前端选用Vue 3.x组合式API开发,主要考虑因素包括:
- 组件化开发模式适合电商页面高度复用的特点
- Composition API比Options API更利于复杂业务逻辑组织
- Pinia状态管理完美匹配购物车、用户会话等全局状态需求
数据库采用MySQL 8.0,其JSON字段支持非常适合存储商品规格参数。例如宠物食品的适用年龄段、口味等动态属性:
sql复制CREATE TABLE `product_spec` (
`id` bigint NOT NULL AUTO_INCREMENT,
`product_id` bigint NOT NULL,
`spec_json` json DEFAULT NULL COMMENT '规格参数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 整体架构图
采用经典的三层架构:
code复制表现层:Vue3 + Element Plus
业务层:SpringBoot + Spring Security
数据层:MySQL + Redis
2.2 核心模块划分
-
用户中心模块
- JWT令牌认证
- 分布式会话管理
- 第三方登录集成(微信、支付宝)
-
商品服务模块
- 商品分类树形结构存储
- 商品评价分表设计
- 商品搜索ES集成
-
订单交易模块
- 分布式事务处理
- 订单状态机设计
- 支付渠道对接(微信支付、支付宝)
-
宠物服务模块
- 宠物健康档案
- 预约服务管理
- 智能推荐算法
2.3 关键技术实现
商品详情页性能优化方案:
- 使用Redis缓存商品基础信息(设置5分钟过期)
- 评价数据采用分页查询+缓存预热
- 库存信息通过Redisson分布式锁保证一致性
java复制// 商品缓存示例代码
public ProductDetailVO getProductDetail(Long productId) {
String cacheKey = "product:" + productId;
ProductDetailVO detail = redisTemplate.opsForValue().get(cacheKey);
if(detail == null) {
detail = productService.getDetail(productId);
redisTemplate.opsForValue().set(cacheKey, detail, 5, TimeUnit.MINUTES);
}
return detail;
}
3. 数据库设计要点
3.1 核心表结构
用户表设计考虑:
sql复制CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(64) NOT NULL COMMENT '登录账号',
`password` varchar(128) NOT NULL COMMENT 'BCrypt加密',
`mobile` varchar(20) DEFAULT NULL COMMENT '手机号',
`avatar` varchar(255) DEFAULT NULL COMMENT '头像URL',
`pet_type_preference` json DEFAULT NULL COMMENT '宠物类型偏好',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_username` (`username`),
KEY `idx_mobile` (`mobile`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
订单表分库分表策略:
- 按用户ID哈希分库
- 按月分表(order_202301, order_202302...)
- 使用ShardingSphere实现透明分片
3.2 索引优化实践
商品搜索场景的复合索引设计:
sql复制ALTER TABLE `product`
ADD INDEX `idx_search` (`category_id`, `price`, `sales_volume`),
ADD FULLTEXT INDEX `ftx_title` (`title`);
注意:JSON字段查询需要MySQL 8.0以上版本支持,低版本应考虑拆分为传统列或使用Elasticsearch
4. 前端工程化实践
4.1 Vue项目结构
code复制src/
├── api/ # 接口封装
├── assets/ # 静态资源
├── components/ # 公共组件
│ ├── ProductCard.vue # 商品卡片
│ └── AddressPicker.vue
├── composables/ # 组合式函数
│ ├── useCart.js # 购物车逻辑
│ └── useSearch.js
├── router/ # 路由配置
├── stores/ # Pinia状态管理
├── utils/ # 工具函数
└── views/ # 页面组件
4.2 性能优化方案
- 路由懒加载
javascript复制const ProductDetail = () => import('@/views/ProductDetail.vue')
- 图片懒加载
html复制<img v-lazy="product.image" alt="商品图片">
- API请求封装
javascript复制// api/product.js
export const getProductList = (params) => {
return request({
url: '/api/products',
method: 'get',
params,
// 自动重试配置
retry: 3,
retryDelay: 1000
})
}
5. 部署与运维方案
5.1 容器化部署
Docker Compose编排文件示例:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: pet123456
volumes:
- ./mysql-data:/var/lib/mysql
redis:
image: redis:6.2
ports:
- "6379:6379"
backend:
build: ./backend
ports:
- "8080:8080"
depends_on:
- mysql
- redis
frontend:
build: ./frontend
ports:
- "80:80"
5.2 监控方案
- SpringBoot Actuator暴露指标
- Prometheus采集数据
- Grafana展示监控看板
关键监控指标:
- 订单创建成功率
- 商品详情页PV/UV
- API响应时间P99
- JVM内存使用率
6. 典型问题解决方案
6.1 购物车并发修改
问题场景:
用户同时从多个终端修改购物车商品数量
解决方案:
java复制@Transactional
public void updateCartItem(Long userId, Long skuId, Integer num) {
// 使用分布式锁
RLock lock = redissonClient.getLock("cart:" + userId);
try {
lock.lock(3, TimeUnit.SECONDS);
CartItem item = cartMapper.selectByUserAndSku(userId, skuId);
if(item != null) {
item.setQuantity(num);
cartMapper.updateById(item);
}
} finally {
lock.unlock();
}
}
6.2 商品搜索高亮
使用Elasticsearch实现搜索词高亮:
javascript复制// 前端处理高亮结果
function highlightText(text, highlights) {
if (!highlights || !highlights.length) return text;
return highlights.reduce((result, hl) => {
return result.replace(
new RegExp(hl, 'ig'),
match => `<span class="highlight">${match}</span>`
);
}, text);
}
7. 扩展功能建议
-
智能推荐系统
- 基于用户行为的协同过滤
- 宠物品种关联推荐
- 使用TensorFlow Serving部署模型
-
宠物健康档案
- 疫苗接种提醒
- 体检报告上传
- 健康数据分析
-
直播带货功能
- 使用WebRTC实现低延迟直播
- 商品即时弹出功能
- 观众互动消息处理
项目源码建议采用模块化组织:
code复制pet-mall/
├── pet-admin/ # 管理后台
├── pet-gateway/ # API网关
├── pet-service/ # 核心业务
├── pet-search/ # 搜索服务
└── pet-ui/ # 前端项目
