購物車系統的設計

   在電商平臺中,購物車是一個非常核心的功能,用戶瀏覽商品的過程中,他們可以將感興趣的商品加入購物車方便後面挑選和下單。購物車功能的設計對於提升用戶體驗、增加公司商品銷售量都有重要影響。

   上圖是一個典型的電商購物車的圖,購物車協助用戶選購商品時提供如下的功能:

(1)加入商品:用戶可以將商品加入購物車,並選擇商品的數量。

(2)刪除商品:用戶可以從購物車中刪除不想要的商品。

(3)修改商品數量:支持用戶修改購物車中商品的數量。

(4)查詢購物車:用戶可以查看購物車中的所有商品信息。

(6)商品結算:用戶挑選自己需要的商品一起下單結算。

   商品添加到購物車分爲用戶登錄購物車和未登錄購物車(暫存購物車),如京東商城支持用戶登錄和不登錄都可以添加商品到購物車;淘寶商城需要用戶先登錄然後纔可以將商品加入購物車,下面我們聊聊購物車的實現。

1、暫存購物車的實現

   用戶在未登錄的情況,商品添加到購物車的數據一般都是暫存在客戶端上,每個客戶端保存用戶自己唯一的一個購物車。客戶端暫存購物車的數據常見的方案有 Cookie、LocalStorage。

1.1、Cookie 緩存購物車數據

   客戶端與服務端的每次交互都會自動帶着 Cookie 數據往返,這樣服務端可讀取客戶端 Cookie 中的購物車數據;Cookie 存儲購物車商品實現簡單,在加減購物車、合併購物車過程中由於服務端讀取操作 Cookie 中的數據,那麼全部邏輯都可在服務端實現。如下是 Cookie 存儲購物車數據的實現流程圖:

1.2、LocalStorage 緩存購物車數據

   LocalStorage 裏的數據只能由客戶端訪問,然後客戶端再傳給服務器端實現數據的傳遞。使用 LocalStorage 存儲購物車數據,實現上相對複雜,客戶端和服務端都要實現業務邏輯,但是 LocalStorage 的存儲容量比 Cookie(4KB)大得多,而且不用像 Cookie 那樣,每次請求都要帶上,可節省帶寬。

   選擇 Cookie 或 LocalStorage 存儲暫存購物車數據,需要根據自身業務場景來選擇:

(1)如果是小型電商業務場景中,Cookie 在存儲與實現上起來都是比較好的選擇。

(2)如電商規模較大,用戶需加購商品較多的場景下,選擇 LocalStorage 更合適。

2、登錄購物車的實現方案

   用戶登錄的購物車實現需要考慮數據存儲方案,即就是購物車數據放緩存(如 Redis)還是數據庫(如 Mysql),如下設計了一套將購物車數據存儲 Redis 的加購物車方案:

   如果支持商品暫存購物車,那麼當用戶登錄之後需要將客戶端中暫存的商品數據同步到服務端,客戶端以 Cookie 暫存購物車數據爲例的實現流程如下所示:

   用戶登錄成功之後,客戶端將購物車的數據傳遞到服務端,服務端從 Cookie 中解析購物車數據,然後保存到 Redis 上並清除 Cookie 中緩存的購物車數據,通過這樣的合併就可以實現暫存購物車的數據同步。

3、服務端購物車數據的存儲方案

   服務端購物車數據可以保存在 Redis 中也可以保存到 Mysql,需要根據實際的業務場景做衡量:

(1)購物車數據存儲在 Mysql 中,數據可靠性高於 Redis,因爲 Redis 有可能發生丟數據的情況;另一方面 Mysql 支持豐富的查詢方式,使得購物車的數據做查詢和統計的時候非常的方便。用戶的購物車表設計如下所示:

(2)購物車裏的數據存儲在 Redis 中,數據存儲具有快速、高效、讀寫速度非常快。購物車設計中,如果對可靠性要求不高,即使丟少量數據也是可以接受的情況下 Redis 存儲購物車數據的方案能夠有效提升購物車的性能和用戶體驗度。

(3)有場景需要兼顧可靠性和性能的時候,我們可以採用 Redis+Mysql 並用的方式來存儲購物車數據。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/DSeL9iwab_F4wVSFl201Yw