首页 新闻 搜索 专区 学院

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

0
[待解决问题]

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

Anjunadeep的主页 Anjunadeep | 菜鸟二级 | 园豆:202
提问于:2023-03-17 17:54
< >
分享
所有回答(3)
2

1关于多端同步问题:关键信息只在一处保存,其他数据需要用到的时候去查询,尽量避免缓存。
2redis和mysql都会存数据,但是大部分数据从redis里面取,存mysql主要只是把数据备份。

ycyzharry | 园豆:24990 (高人七级) | 2023-03-18 15:30
0

问题1:购物车如何持久化?

Redis本身是一个内存数据库,但是也提供了持久化的功能。Redis的持久化可以分为两种:RDB持久化和AOF持久化。其中,RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘的过程,而AOF持久化是指以日志的形式记录每个写操作,将所有操作重放一遍达到恢复数据的目的。因此,我们可以将购物车数据通过Redis的持久化功能进行保存,进行数据的长期存储,保证购物车数据不会因为系统重启、服务器宕机等原因而丢失。

问题2:购物车中的商品没库存了或降价了怎么同步过来以及数据多端同步的问题?

购物车中商品的库存和价格等信息是不断变化的,因此需要对购物车数据进行实时更新。为了解决这个问题,可以将商品的库存和价格等信息保存到Redis中,并在添加商品到购物车时校验商品的库存和价格等信息。当商品库存或价格发生变化时,需要及时更新Redis中的商品信息,并通知所有订阅这个商品信息的客户端进行相应的更新。可以使用Redis的发布订阅功能实现多端数据同步。当商品库存或价格发生变化时,通过Redis的发布订阅功能向订阅这个商品信息的客户端发送消息,客户端接收到消息后更新相应的商品信息。

综上,购物车数据的持久化和多端同步可以通过Redis的持久化和发布订阅功能来解决,通过对商品信息的实时更新和校验,可以保证购物车中的商品信息是最新的,满足用户的需求。

没有烟抽的日子 | 园豆:260 (菜鸟二级) | 2023-03-20 15:36
1

购物车持久化的问题,可以考虑使用定时任务将Redis中的购物车数据定时同步到MySQL中,这样可以保证数据的持久化,同时也可以避免多端同步的问题。关于购物车中的商品没库存了或降价了怎么同步过来的问题,可以在用户打开购物车页面或勾选商品时,通过异步请求后端接口,从数据库中获取最新的商品信息,然后更新Redis中的购物车数据。这样可以保证购物车中的商品信息始终是最新的。如果担心MySQL负载过大,可以考虑使用缓存来减轻MySQL的负载。例如,可以使用Redis缓存商品信息,然后在更新购物车数据时,先从Redis中获取最新的商品信息,如果Redis中没有,则从MySQL中获取。这样可以减少对MySQL的访问,从而减轻MySQL的负载。

十二年新 | 园豆:221 (菜鸟二级) | 2023-03-23 14:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册