主要有兩方面的問題:
1、登錄狀態下添加商品到購物車
此時購物車是對應一個用戶,很簡單,就是將商品的數據插入數據庫中即可,但是如果讀寫頻繁的時候,就存在壓力問題,此時我們可以使用Redis擔任讀的部分功能。
2.未登錄下加入購物車,登錄下合並購物車
在未登錄狀態下,沒有指定的用戶,此時購物車應該怎么分配,數據把偶才能在什么位置,這個其實也不難,我們可以將數據臨時保存到Redis中,並不插入數據庫中,因為此時沒有對應的用戶,Redis生成一個唯一的outerKey,保存到cookie中,每次添加商品,帶上這個cookie,這樣就保證每次加入同一個購物車,這個數據會被保存一段時間。
如何將未登錄狀態下的購車和登錄狀態下的購車數據合並?
當用戶登錄的時候,我們該如何將未登錄狀態下的購車和登錄狀態下的購車數據合並呢。這個就需要使用到消息了,我們可以發送一個消息給后台系統,將未登錄狀態下的outerKey傳遞給后台系統,后台系統到Redis中查詢到未登錄狀態下的購物車,將購物車中的數據插入到數據庫中,和之前登錄狀態下的購車數據合並,重新緩存到Redis中,此時緩存到Redis中的購物車是和未登錄狀態不同的,因為這個緩存的購物車是有主人的,未登錄狀態下緩存的臨時購物車是沒有主人的。
對比三大巨頭:
再反觀各大電商網站,基本上分為三個流程:
一.例如淘寶,你瀏覽商品是可以的。但是如果你要添加商品到購物車的話就需要登錄;
二.例如京東,無論是未登錄還是登錄的用戶都可以使用將需要的商品添加入購物車內;
三.例如蘇寧跟京東類似,可以在用戶未登錄的狀態下加入購物車,然后再合並。
以上各有利弊:、
利用cookie來作為用戶未登錄狀態下加入購物車,但是不同設備之間的數據同步是一個問題?
強制用戶登錄可以解決這個問題,那么還有其他好的方式嗎?
未登錄的時候購物車的商品如何與用戶的登錄后的購物車的商品進行合並?
這些涉及到的技術有哪些?
3、未登錄的狀態下,使用cookie來保存購物車商品?
主流的瀏覽器:
cookie --- value 4kb 如果超過規定的大小,那我們cookie則無法保存到本地(無法被設置)
解決辦法:sku減肥,盡量縮短sku的大小
4、用戶登錄后如何合並未登錄前的購物車和登錄后的購物車?
借閱上面博主的思路:使用RabbitMQ來實現合並。發送消息機制。