商城项目(2.0版本) day12

一、功能说明

1.1 功能分析

1 购物车在不登陆的情况下,也可以使用
需要引入对浏览器cookie的操作

2 购物车在登录的情况下,需要使用mysql和redis来存储数据
Redis作为购物车的缓存

3 在缓存情况下,或者用户已经添加购物车后,允许购物车中的数据和原始商品数据的不一致性

4 购物车同步问题
什么时候同步(结算、登录)
同步购物车后,是否需要删除cookie数据

5 用户在不同的客户端同时登录
如何处理购物车数据

1.2 解决方案

1 传递参数(商品skuid,添加数量)

2 根据skuid调用skuService查询商品的详细信息

3 将商品详细信息封装成购物车信息

4 判断用户是否登录

5 根据用户登录决定走cookie的分支还是db

if(StringUtils.isBlank(memberId)){
    // 用户没有登录
Cookie:response.addCookie(cookie) request.getCookies(); 
Cookie:的跨域问题,setDomain(),getDomain()  item.gmall.com.gmall.com
}else{
    // 用户已经登录
Db+cache
}

6 购物车的类型
Db : cartListDb(有主键和用户id)
Cookie : cartListCookie(没有主键和用户id)
Redis : cartListCache(有主键和用户id)

在这里插入图片描述

在这里插入图片描述

二、具体实现

2.1、 未登入

一、cookie 判断是否为空

在这里插入图片描述

2.2、登入状态
2.2.1 redis存储结构

使用redis 存储。

键为:User:memberId:cart

3 购物车缓存中的某一个购物车数据的更新
X如果用set kv 取出json,转化成集合,从集合中取出对象,修改对象,放回集合,集合放回缓存,这是一种错误的存储数据的方案。
V使用hash进行存储(方便查询和修改用户购物车集合中的某一个单独的购物车对象)

2.2.2 购物车列表

1 购物车列表数据从缓存中取
2 购物车页面展示
在这里插入图片描述
3 修改选中状态
A ajax异步+内嵌页
B修改数据库的购物车状态
C数据库修改后同步缓存

2.2.3 BigDecimal 进行运算

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值