日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

前后端分离电商B2C模式之_后台_购物车

發(fā)布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前后端分离电商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模式之_后台_购物车的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。