一、购物车需求分析
未登录状态下,是游客购物车,也是可以将商品加入购物车的,即使浏览器关掉了,下次打开的时候还有,如果是未登录状态下,添加了购物车,并之后进行了用户登录,则游客购物车的商品是要加入到用户购物车中的,再次以游客状态登录时,游客购物车是空的(游客购物车需要被清空);登录状态下,是用户购物车\在线购物车。
登录状态下:
登录以后,会讲临时购物车的数据全部合并过去,并清空临时购物车
未登录状态下:
浏览器即使关闭,下次进入,临时购物车的数据还是存在的
需要我们写的功能如下:
购物车用什么技术?
用户处于登录状态下时:
购物车的数据是永久存在的,不会被清空,优先使用mysql存储;但是再仔细分析的话,购物车信息是读多还是写多呢,其实是读写都处于高并发的操作,如果使用数据库,在读写都处于高并发的情况下,让数据库会承担更大的压力,所以不推荐使用数据库。根据购物车的数据类型,都是存储的一条条的购物项的文档数据
可以考虑将购物车的数据放在redis中(nosql数据库),mongodb不推荐
放在redis中的好处是:
1、数据结构好组织
2、redis有极高的读写并发性能—-出现一个问题:登录状态下的购物车是需要持久化保存,但是redis是一个内存数据库,所有数据存储在内存中,一旦redis宕机,数据就没有了;但是mysql就不一样了。这个redis的解决方案:在安装redis时,指定好持久化策略(rdb和aof),即使redis宕机,启动了以后数据还是存在的,虽然损失了一定的性能(没有那么高的性能),但是这么做也比mysql快很多
处于未登录状态时:
可以在客户端保存,后台服务器压力就很小了,但是缺点也很明显,在大数据时代,每一个人的首页推荐的商品都是不一样的,比如电脑啊(电脑关键字搜索的多的状态下),会分析某些人添了哪些商品,即使没有添加商品也要推荐一些商品,通过大数据分析,来达到使用户购买的能力,所以在客户端保存不推荐,我们要将有价值的数据保存在后端。
可以考虑将购物车的数据放在redis中(nosql数据库),需要分析redis中的数据结构是什么样子的,才可以正确的将
数据保存在redis中,一个用户对应两个购物车(登录状态下:用户购物车;未登录状态下是临时购物车),首先购物车的所有数据都是要存储在redis中的,购物车的所有数据就是我们购买的一件一件的商品,称为购物项,购物车里面就应该有每一个购物项 ,每一个购物项是什么商品,他的图片,他的名字、价格、数量,以及总价,还有优惠信息,购物车有很多购物项,每一个商品都有购物项的商品id,根据商品id可以查看商品的详细信息,是否选中信息,商品标题、图片、商品单价、商品保存的数量,商品的总计价格,以及销售组合,这是一个购物项,但是我们的购物车里面有很多个的购物项,相当于有很多个数组。所以每一个用户对应两个购物车(临时购物车和用户购物车),所以可以设置为key为用户id,肯定不能用list存储,因为有可能对某一项购物项进行修改增加数量或者减少数量,所以使用了Hash存储

二、ThreadLocal-同一个线程共享数据

