还是谈谈购物车是如何实现的吧,购物车首先标识要唯一,因为每个账号要对应一个购物车,在登录状态下,我们可以直接将数据保存到数据库中,使用用户的id表示自己购买的商品,但是如果在未登录状态下呢,或者对购车访问量大的时候,这个就存在弊端,因为这样高速的读写数据库,会对数据库的压力比较大,在这里我们就看看如何用Redis和RabbitMQ解决这个问题。
第一章:登录状态下添加商品到购物车
此时购物车是对应一个用户,很简单,就是将商品的数据插入数据库中即可,但是如果读写频繁的时候,就存在压力问题,此时我们可以使用Redis担任读的部分功能。
在向[数据库]中插入数据的时候,使用RabbitMQ发送消息,然后有一个消息系统监听消息,将RabbitMQ中消息内容(保存到[Redis]中,但是此时Redis中我们该用什么存储结构,在Redis中存储结构有很多种,这里我们使用hash结构,看下面的图,分析一下hash结构:
从上面的图我们可以看的出来,这个图有两个键,一个是外部键,一个是内部键,这个就体现了购物车的好处,这里外部键可以标记一个唯一的购物车,内部键就可以标记购物车上的一个商品,一个外部键可以对应多个内部键,这个和一个购物车里有多个商品是相符合的,在用户查询自己的购物车数据的时候,就不要到数据库中查询,而是直接从redis中将数据拿出来即可,这样数据库的读压力就被Redis分担出去了。
就这样把登录状态下购物车问题解决了。
第二章:未登录下加入购物车