前后端分离电商B2C模式之_后台_购物车
生活随笔
收集整理的這篇文章主要介紹了
前后端分离电商B2C模式之_后台_购物车
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1, 需求
2,加入購物車的思路圖
3,加入購物車的接口
4,配置公鑰,加載公鑰
5,獲取token,用戶信息
6,后臺購物車——數據結構設計
當用戶登錄時,我們需要把購物車數據保存到后臺,可以選擇保存在數據庫。但是購物車是一個讀寫頻率很高的數據。因此我在這里選擇讀寫效率比較高的Redis作為購物車存儲。
Redis有5種不同數據結構,這里選擇哪一種比較合適呢?
- 首先不同用戶應該有獨立的購物車,因此購物車應該以用戶的作為key來存儲,Value是用戶的所有購物車信息。這樣看來基本的k-v結構就可以了。
- 但是,我們對購物車中的商品進行增、刪、改操作,基本都需要根據商品id進行判斷,為了方便后期處理,我們的購物車也應該是k-v結構,key是商品id,value才是這個商品的購物車信息。
綜上所述,我們的購物車結構是一個雙層Map:Map<String,Map<String,String>>
- 第一層Map,Key是用戶id
- 第二層Map,Key是購物車中商品id,值是購物車數據
7,添加購物車
@Service public class CartService {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Autowiredprivate SkuClient skuClient;@Autowiredprivate JwtProperties jwtProperties;/*** 用戶登錄的時候,可以一個一個添加商品進購物車** @param cartRequest* @param req*/public void addCart(Cart cartRequest, HttpServletRequest req) {//1,獲取tokenString token = req.getHeader("authorization");// 2,公鑰解密UserInfo userInfo = null;//3,默認解析成功boolean flag = true;try {// 拿著這個頭的信息進行公鑰解密userInfo = JwtUtils.getInfoFromToken(token, jwtProperties.getPublicKey());} catch (Exception e) {e.printStackTrace();//解析失敗flag = false;}// 解析失敗,就無需繼續(xù)執(zhí)行下去if (!flag) {return;}//4,根據UserID去購物車中取數據String shop = redisTemplate.opsForValue().get(userInfo.getId().toString());//5,判斷Redis中是否有購物車的數據if (shop != null && StringUtils.isNoneBlank(shop)) {// 6,解析shop,把shop轉成Cart集合List<Cart> carts = JSON.parseArray(shop, Cart.class);// 7,遍歷當前購物車集合,判斷商品是否已經存在Cart cart = null;for (Cart c : carts) {// 8,判斷Redis里面的sku,是否跟前臺傳過來的sku一樣if (c.getSkuid().equals(cartRequest.getSkuid())) {//把redis里面的數據給購物車。cart = c;break;}}if (cart != null) {// 9,如果存在,改變數量//取出cart對象修改,由于是對象,是引用數據類型,在外面改了,List集合中的數據也會自動改變cart.setCount(cart.getCount() + cartRequest.getCount());} else {//10,如果不存在,則追加carts.add(cartRequest);}// 11,存入redis,JSON.toJSONString轉成JSonredisTemplate.opsForValue().set(userInfo.getId().toString(), JSON.toJSONString(carts));} else {//12,shop沒有值ArrayList<Cart> carts = new ArrayList<>();carts.add(cartRequest);redisTemplate.opsForValue().set(userInfo.getId().toString(), JSON.toJSONString(carts));}} }8,接收請求
測試
總結
以上是生活随笔為你收集整理的前后端分离电商B2C模式之_后台_购物车的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Vue】报错:Avoid mutati
- 下一篇: 苹果ipcc下载