1、商城購物車系統實現的三種方案
1.1、session
將購物車直接存放到與用戶相關的session中。
優點:
代碼實現超級簡單。
缺點:
購物車存在session當中,如果session銷毀,購物車就沒有了。(session只存在於一次會話中。)
用戶未登錄的時候不能添加購物車。
購物車使用了session,而session是存在於內存資源中,消耗了大量的內存資源。非常不好。
集群情況下,session很難共享,無法進行水平擴展。(tomcat的session廣播對資源消耗嚴重,即tomcat的帶寬不干別的了,就去廣播了。)
1.2、cookie
將購物車直接存放到瀏覽器的cookie中。
優點:
在不登陸的情況下也可以添加購物車。
不占用服務端存儲空間。
用戶體驗好。
代碼實現簡單。
缺點:
cookie中保存的容量有限。最大4k。
cookie占用的是瀏覽器的緩存,可能用戶會定期刪除cookie。
把購物車信息保存在cookie中,更換設備購物車信息不能同步。
1.3、cookie+入庫 / 直接入庫
對於未登陸用戶,將購物車放到cookie中,對於已登陸用戶將購物車放入數據庫中。
將購物車持久化到數據庫中。這里的數據庫指的是關系型數據庫
或者非關系型數據庫
。
優點:
關系型數據庫:mysql數據庫(數據完整性比較好)
非關系型數據庫:redis數據庫(讀寫速度快)
缺點:
相對於session和cookie,沒啥缺點。
占用服務端資源。
2、購物車實現總結
自己寫着玩的代碼可以使用cookie+session。
真實場景應該是要使用cookie+入庫,或者直接入庫。
京東准許未登錄狀態添加購物車,應該采用的是cookie+入庫。
淘寶並不准許用戶未登錄添加購物車,應該采用的是直接入庫。