初始模型:

购物车本质上就是保存 user_id + sku_id + quantity + selected,支持加购、删商品、改数量、勾选、查询。

  • 唯一关系:同一个用户的同一个 SKU 不应该出现多条 → user_id + sku_id 做唯一索引,重复加购只更新 quantity
  • 高频读写:购物车操作频繁,直接都打数据库压力较大 → Redis 扛高频读写,数据库做持久化
  • 游客购物车:未登录用户也要能加购 → Cookie 里保存 cart_token / visitor_id,服务端按这个标识保存购物车
  • 登录合并:游客登录后不能丢原来的购物车 → 把游客购物车合并到 user_id 对应购物车,同 SKU 按规则合并数量
  • 商品信息校验:价格、库存、上下架会变化 → 购物车只存 SKU 和数量,结算时重新校验最新商品状态
  • 并发修改:同一用户可能多端同时修改 → 原子更新 / 乐观锁,避免 quantity 被覆盖
  • 容量限制:购物车不能无限增长 → 限制 SKU 数量和单 SKU 数量
  • 过期清理:长期不用的购物车可以回收 → 记录过期时间,后台定期清理

最后主线就是:

保存用户-SKU关系 → 唯一约束 → Redis 扛高频读写 → DB 持久化 → 游客购物车登录后合并 → 结算重新校验 → 并发和容量做保护。