11_购物车解决方案

本文探讨了购物车的三种常见实现方式:Cookie、Session和数据库,分析了各自的优缺点。京东的实现策略是在用户未登录时使用Cookie存储购物车信息,登录后切换到Redis。购物车数据结构包括店铺和商品两个Hash,用于存储用户购物车详情。添加购物车商品时,会检查用户是否登录,并根据状态决定数据存储位置。
摘要由CSDN通过智能技术生成

1.购物车的几种实现方式

购物车的实现方式有很多,但是最常见的就三种:Cookie,Session,数据库.三种方法各有优劣,适合的场景各不相同.

  • Cookie方法:通过把购物车中的商品数据写入Cookie中,再通过浏览器进行读取.这个方法,适合在用户没有登录 的情况下使用,但是有个非常严重的缺点,即在用户禁用了Cookie的时候是无法使用的.
  • Session方法:通过Session来保存商品信息,这确实是个好的方法,适合用户已经登录的情况,将数据放在Session 中,用户就能读取购物车中的商品信息,而且速度十分的快.但是缺点也很明显,由于Session是建立在用户客户端 和服务器之间的,在Session中保存数据,无疑会增加服务器的负担.
  • 数据库:数据库无疑是一种非常棒的保存购物车中信息的有效途径,且能够持久化保存,但是问题也很明显,那就 是读取速度会差强人意。
  • 数据库优化方案:是可以使用 Cookie+redis 来存储购物车数据。

2.实现方案

京东实现思路: 当用户在未登录的情况下,将此购物车存入cookies , 在用户登陆的情况下,将购物车数据存入 redis 。如果用户登陆时,cookies中存在购物车,需要将cookies的购物车合并到redis中存储,清空cookies中的购物车。实际上京东在未登录状态下的购物车并不是完全保存到cookie中的,也是保存在服务端的。cookie中保存了一个 user-key 的cookie值。

在这里插入图片描述

登录后,

在这里插入图片描述


购物车数据结构

在这里插入图片描述

在redis中我们可以使用两个hash来存储购物车数据。一个存储购物车的店铺信息,一个存储sku明细。

店铺 hash:

keyfieldvalue
cart:{user-key}:info店铺1Id店铺1信息(json)
店铺2Id店铺2信息(json)

店铺信息:

{ 
    "seller_id":"xiaomi", 
    "nickName":"小米官方旗舰店" 
}

商品hash:

keyfieldvalue
cart:{user-key}:detailsku1sku1信息(json)
sku2sku2信息(json)

sku信息:

{ 
    "item_id":12345678,
    "title":"ThinkPad笔记本 联想 A485 14英寸轻薄便携商务办公手提笔记本电脑锐龙",
    "sku_info":"03CD【标配】8G内存 128G+1TB双硬盘IPS FHD全高清屏 office Win10",
    "price":6887,
    "num":1, 
    "image":"http://imageserver/123444.jpg", 
    "goods_id":"234587582", 
    "seller_id":"lenovo", 
    "old_price":6887, 
    "onSell":true
}

添加购物车

添加一件商品,需要传入:商品id,Client_id(登录前保存到Cookie中的购物车信息),店铺id

后台接收到请求的参数后,根据商品id去mysql数据库查询商品对应的详细信息,即sku

查询到sku后,判断当前是否登录,如果未登录,根据Client_id取得购物车信息,返回购物车信息

​ 如果登录,根据当前登录用户id查询购物车信息,返回购物车信息

然后查看购物车中是否已经存在商品,如果存在,直接加数量,不存在则添加sku

在这里插入图片描述
在这里插入图片描述


展示购物车

在这里插入图片描述


商品信息修改

购物车信息是存到redis中的

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值