面试的时候被问到关于购物车的问题,想请教一下各位大佬?

老师讲的这个模块还是比较简陋的,是把购物车的存到redis里。
然后面试就被问1.购物车持久化、2.购物车中的商品没库存了或降价了怎么同步过来以及数据多端同步的问题。
当时答的有点烂,后来自己想了下:
1.购物车如果我暂存redis里,用户一段时间不操作就持久化到数据库,但是这么搞会有多端同步的问题,我也不知道怎么解决。
2.购物车数据的同步是发生在打开购物车页面和勾选商品时发生的,我们只要在用户做这些操作的时候去数据库查就行了,但是这么搞redis不就成了摆设而且mysql负载太大了?
有没有懂得老哥指点一下 感谢


回答:

我是萌新,凭感觉回答一下
1.购物车数据不太适合用数据库做持久化,直接用redis缓存就好,哪怕过期了再查数据库也比直接全存进数据库强
2.你说的好像是redis与数据库的一致性问题,我觉得可以在调整价格或库存的时候,对数据库的数据进行更新,然后再删除redis缓存,在下一次用户查询时再把数据缓存进redis
第一次回答,有错误还希望大佬指点^^


回答:

首先,要说明的是, MySQL 并没有你想象的那么脆弱。

购物车大多数时的读写频率也并不高,量也不会很大,很少有人会往购物车加上百个产品(况且你还可以限制加购上限)

当用户在对购物车商品结算后,大部分时候都会将已经结算的商品移出购物车,所以这个表也不会无限膨胀。

对于加购、修改这些常规操作,我认为是可以直接落库的。

对产品信息而言(包括价格和状态)是可以放到 Redis 去,每次从 Redis 获取,当产品信息这些变化时,可以销毁缓存使其自动重建。

购物车若要缓存也是可以的,但是只缓存基本信息(产品ID、数量、选项、价格、勾选、原价等)而不是全量缓存,有变化时及时销毁缓存。

每次获取购物车后就将拿到的信息进行整合并更新缓存。如:用产品ID获取产品缓存,判断是否下架,以及新的价格等。

以上是 面试的时候被问到关于购物车的问题,想请教一下各位大佬? 的全部内容, 来源链接: utcz.com/p/945053.html

回到顶部