購物車的存儲模式(思路):
思考:在用戶登錄與未登錄狀態都可以操作購物車(將商品添加到購物車),可以選擇將購物車信息根據指定的用戶名或者通過一個唯一的key值放入cookie中存儲,但是cookie中存儲大小是有限制的(4kb),所以可以考慮將購物車信息放入Redis中進行存儲。
步驟:
1、在用戶未登錄時:通過UUID工具類隨機生成一個唯一key值,將其保存到cookie中,然后將其以cookie中的key值作為key通過redisTemplate.boundHashOps("cartList").put(uuid, cartList);保存到Redis緩存中。未登錄時按照uuid到Redis緩存中取購物車信息redisTemplate.boundHashOps("cartList").get(uuid)
2、在用戶登錄后:以用戶名(sellerId)作為key值將購物車信息保存到Redis存儲,redisTemplate.boundHashOps("cartList").put(username, cartList);
並將未登錄時的購物車合並到已經的登錄的購物車中,為了優化性能,需要先判斷未登錄時購物車中是否有商品,
(1)如果未登錄時的Redis緩存購物車中有商品(購物車長度大於0),則進行合並(遍歷未登錄時的購物車,調用添加商品到購物車的方法進行合並),然后將合並的購物車更新到登錄后的購物車Redis緩存中,同時清空未登錄時保存在Redis中的購物車信息。
(2)如果未登錄時的Redis緩存購物車中沒有商品(購物車長度小於0),則直接將登錄時的購物車信息進行返回