import{_ as d}from"./plugin-vue_export-helper.21dcd24c.js";import{r as s,o as a,c,a as i,b as r,d as e,e as t}from"./app.36bfa2ec.js";const l={},o=e("\u5927\u5BB6\u597D\uFF0C\u6211\u662F\u8001\u4E09\uFF0C\u4E0A\u4E00\u7BC7\u6211\u4EEC\u804A\u4E86 "),v={href:"https://mp.weixin.qq.com/s?__biz=MzkwODE5ODM0Ng==&mid=2247491980&idx=1&sn=22c357da998773d57115d71c3f5708c3&scene=21#wechat_redirect",target:"_blank",rel:"noopener noreferrer"},p=e("\u5982\u4F55\u9632\u6B62\u8BA2\u5355\u91CD\u590D\u652F\u4ED8"),u=e(" \u8FD9\u7BC7\u548C\u5927\u5BB6\u804A\u804A\u5982\u4F55\u9632\u6B62\u91CD\u590D\u4E0B\u5355\uFF0C\u6587\u7AE0\u5F88\u77ED\uFF0C\u5927\u6982\u53EA\u9700\u8981\u51E0\u5206\u949F\u9605\u8BFB\u3002"),b=t(`

\u5173\u6CE8\u516C\u4F17\u53F7\u300C\u4E09\u5206\u6076\u300D\uFF0C\u56DE\u590D\u300C666\u300D\uFF0C\u9886\u53D6\u4E03\u767E\u591A\u9875\u72EC\u5BB6\u539F\u521B\u7684\u9762\u8BD5\u624B\u518C\uFF01

\u9762\u6E23\u9006\u88AD\u624B\u518C

\u7528\u6237\u4E0B\u5355\u6D41\u7A0B

\u6211\u4EEC\u4ECE\u7528\u6237\u6D4F\u89C8\u5546\u54C1\u5F00\u59CB\uFF0C\u770B\u770B\u7528\u6237\u4E0B\u5355\u7684\u7B80\u8981\u8FC7\u7A0B\uFF1A

\u7528\u6237\u4E0B\u5355\u7B80\u8981\u8FC7\u7A0B

\u6211\u4EEC\u53EF\u4EE5\u770B\u5230\uFF0C\u4E0B\u5355\u662F\u53D1\u751F\u5728\u7ED3\u7B97\u4E4B\u540E\uFF0C\u4E0B\u5355\u4E4B\u540E\uFF0C\u4F1A\u751F\u6210\u552F\u4E00\u7684\u8BA2\u5355\u53F7\uFF0C\u63A5\u4E0B\u6765\uFF0C\u5BA2\u6237\u7AEF\u9700\u8981\u7528\u8FD9\u4E2A\u8BA2\u5355\u53F7\u53BB\u5B8C\u6210\u652F\u4ED8\u3002

\u90A3\u63A5\u4E0B\u6765\u5148\u770B\u770B\uFF0C\u4E3A\u4EC0\u4E48\u53D1\u751F\u91CD\u590D\u4E0B\u5355\uFF1F

\u4E3A\u4EC0\u4E48\u4F1A\u91CD\u590D\u4E0B\u5355

\u4E3A\u4EC0\u4E48\u4F1A\u91CD\u590D\u4E0B\u5355\uFF0C\u5BF9\u4E8E\u8BA2\u5355\u670D\u52A1\u800C\u8A00\uFF0C\u5C31\u662F\u63A5\u5230\u4E86\u591A\u4E2A\u4E0B\u5355\u7684\u8BF7\u6C42\uFF0C\u539F\u56E0\u53EF\u80FD\u6709\u5F88\u591A\uFF0C\u6700\u5E38\u89C1\u7684\u662F\u8FD9\u4E24\u79CD\uFF1A

\u91CD\u590D\u4E0B\u5355\u539F\u56E0

\u5982\u4F55\u9632\u6B62\u91CD\u590D\u4E0B\u5355

\u9632\u6B62\u7528\u6237\u63D0\u4EA4\uFF0C\u6700\u5E38\u89C4\u7684\u505A\u6CD5\uFF0C\u5C31\u662F\u5BA2\u6237\u7AEF\u70B9\u51FB\u4E0B\u5355\u4E4B\u540E\uFF0C\u5728\u6536\u5230\u670D\u52A1\u7AEF\u54CD\u5E94\u4E4B\u524D\uFF0C\u6309\u94AE\u7F6E\u7070\u3002

\u5F53\u7136\uFF0C\u9632\u6B62\u91CD\u590D\u4E0B\u5355\uFF0C\u80AF\u5B9A\u4E0D\u80FD\u53EA\u4F9D\u9760\u5BA2\u6237\u7AEF\uFF0C\u53EF\u80FD\u4F1A\u56E0\u4E3A\u4E00\u4E9B\u7F51\u7EDC\u7684\u6296\u52A8\uFF0C\u5BFC\u81F4\u4ECD\u7136\u6709\u91CD\u590D\u7684\u8BF7\u6C42\u5230\u8FBE\u670D\u52A1\u7AEF\uFF0C\u6240\u4EE5\u8FD8\u662F\u8981\u5728\u670D\u52A1\u7AEF\u505A\u9632\u91CD/\u5E42\u7B49\u7684\u5904\u7406\u3002

PS\uFF1A\u8FD9\u91CC\u989D\u5916\u63D2\u5165\u4E00\u70B9\u6211\u5BF9\u9632\u91CD\u548C\u5E42\u7B49\u7684\u7406\u89E3\uFF1A\u9632\u91CD\u6307\u7684\u662F\u9632\u6B62\u91CD\u590D\u63D0\u4EA4\uFF0C\u5E42\u7B49\u6307\u7684\u662F\u591A\u6B21\u8BF7\u6C42\u5982\u4E00\u6B21\uFF0C\u7B80\u5355\u8BF4\uFF0C\u5C31\u662F\u9632\u91CD\u53EF\u4EE5\u7ED9\u5BF9\u91CD\u590D\u8BF7\u6C42\u629B\u5F02\u5E38\uFF0C\u5E42\u7B49\u662F\u5BF9\u91CD\u590D\u7684\u8BF7\u6C42\u54CD\u5E94\u7B2C\u4E00\u6B21\u7684\u7ED3\u679C\uFF0C\u5728\u6211\u4EEC\u8BA8\u8BBA\u7684\u8FD9\u4E2A\u573A\u666F\u91CC\uFF0C\u5E42\u7B49\u5C31\u662F\u54CD\u5E94\u552F\u4E00\u7684\u8BA2\u5355\u53F7\u3002

\u9632\u91CD\u548C\u5E42\u7B49

\u9632\u91CD\u7B2C\u4E00\u6B65\uFF0C\u9700\u8981\u8BC6\u522B\u8BF7\u6C42\u662F\u5426\u91CD\u590D\uFF0C\u8FD9\u4E00\u6B65\uFF0C\u9700\u8981\u5BA2\u6237\u7AEF\u914D\u5408\u5B9E\u73B0\u3002

\u4E3A\u4EC0\u4E48\u5462\uFF1F\u5927\u5BB6\u60F3\u4E00\u4E0B\uFF0C\u4E0B\u5355\u7684\u65F6\u5019\uFF0C\u670D\u52A1\u7AEF\u600E\u4E48\u53BB\u5224\u65AD\u8FD9\u4E2A\u4E0B\u5355\u8BF7\u6C42\u662F\u5426\u552F\u4E00\u5462\uFF1F\u91D1\u989D\uFF1F\u5546\u54C1\uFF1F\u4F18\u60E0\u5238\uFF1F\u2026\u2026\u4E07\u4E00\u7528\u6237\u5C31\u662F\u559C\u6B22\uFF0C\u53C8\u4E0B\u4E86\u4E00\u4E2A\u4E00\u6A21\u4E00\u6837\u7684\u5355\u5462\uFF1F

\u6240\u4EE5\uFF0C\u9700\u8981\u5BA2\u6237\u7AEF\u5728\u8BF7\u6C42\u4E0B\u5355\u63A5\u53E3\u7684\u65F6\u5019\uFF0C\u9700\u8981\u751F\u6210\u4E00\u4E2A\u552F\u4E00\u7684\u8BF7\u6C42\u53F7\uFF1ArequestId\uFF0C\u670D\u52A1\u7AEF\u62FF\u8FD9\u4E2A\u8BF7\u6C42\u53F7\uFF0C\u5224\u65AD\u662F\u5426\u91CD\u590D\u8BF7\u6C42\u3002

\u90A3\u4E48\uFF0C\u63A5\u4E0B\u6765\uFF0C\u538B\u529B\u5C31\u7ED9\u5230\u670D\u52A1\u7AEF\u4E86\uFF0C\u770B\u770B\u670D\u52A1\u7AEF\u600E\u4E48\u5B9E\u73B0\u9632\u91CD/\u5E42\u7B49\u5427\uFF01

\u5229\u7528\u6570\u636E\u5E93\u5B9E\u73B0\u5E42\u7B49

\u53EF\u4EE5\u5728\u8BA2\u5355\u8868t_order\u91CC\u6DFB\u52A0\u4E00\u4E2A\u5B57\u6BB5\uFF1ArequestId\uFF0C\u6DFB\u52A0\u552F\u4E00\u7D22\u5F15\uFF1A

\u552F\u4E00\u8BF7\u6C42\u5B57\u6BB5

\u8FD9\u6837\u4E00\u6765\uFF0C\u5982\u679C\u662F\u91CD\u590D\u7684\u8BF7\u6C42\uFF0C\u5728\u843D\u5E93\u7684\u65F6\u5019\u5C31\u4F1A\u62A5\u9519\uFF0C\u4E3A\u4E86\u4FDD\u8BC1\u5E42\u7B49\u6027\uFF0C\u6211\u4EEC\u53EF\u4EE5catch\u4F4F\u8FD9\u4E2A\u5F02\u5E38\uFF0C\u6839\u636ErequestId\u83B7\u53D6\u8BA2\u5355\u53F7\uFF0C\u7136\u540E\u5411\u5BA2\u6237\u7AEF\u54CD\u5E94\u8BA2\u5355\u53F7\u3002

\u5927\u6982\u7684\u4EE3\u7801\u5982\u4E0B\uFF1A

PlaceOrderResVO placeOrder(PlaceOrderReqVO reqVO) {
  try {
    //\u4E0B\u5355\u4E1A\u52A1\u903B\u8F91
    \u2026\u2026
    //\u751F\u6210\u8BA2\u5355\u53F7
    String oid=generateOid();
    \u2026\u2026
    //\u8BA2\u5355\u843D\u5E93
    Order order = orderMapper.saveOrder(orderDO); 
    //\u54CD\u5E94\u8BA2\u5355
    resVO.setOid(order.getOid());
    return resVO;
  } catch(UniqueKeyViolationException e) {
    // \u53D1\u751F\u4E86\u91CD\u590D\u5F02\u5E38
    // \u6839\u636E\u8BF7\u6C42\u53F7\u83B7\u53D6\u8BA2\u5355
    Order order = getOrderByRequestId(reqVO.getRequestId());
    resVO.setOid(order.getOid());
    return resVO;
  } catch (Exception e) {
  }
}

\u5F53\u7136\uFF0C\u8FD9\u91CC\u4E0D\u592A\u597D\u7684\u5730\u65B9\u662F\uFF0C\u62FF\u5F02\u5E38\u6765\u505A\u4E1A\u52A1\u5224\u65AD\u3002

\u5229\u7528Redis\u9632\u91CD

\u53E6\u5916\u4E00\u4E2A\u529E\u6CD5\uFF0C\u5C31\u662F\u4E0B\u5355\u8BF7\u6C42\u7684\u65F6\u5019\u8981\u52A0\u9501\u4E86\uFF0C\u901A\u5E38\u6211\u4EEC\u7684\u670D\u52A1\u90FD\u662F\u96C6\u7FA4\u90E8\u7F72\uFF0C\u6240\u4EE5\u4E00\u822C\u90FD\u662F\u7528Redis\u5B9E\u73B0\u5206\u5E03\u5F0F\u9501\u3002

\u5927\u6982\u7684\u903B\u8F91\uFF1A

redis\u9632\u91CD\u903B\u8F91

\u5927\u6982\u7684\u4EE3\u7801\u5982\u4E0B\uFF1A

    public PlaceOrderResVO placeOrder(PlaceOrderReqVO reqVO) {
        //\u52A0\u9501
        RLock orderLock = redissonClient.getLock(RedisConstant.PLACE_ORDER_LOCK_KEY + reqVO.getRequestId());
        //\u83B7\u53D6\u9501\u5931\u8D25\uFF0C\u629B\u51FA\u91CD\u590D\u4E0B\u5355\u5F02\u5E38
        if(orderLock.isExistes){
          throw new OrderRepeatException();
        }
        // \u52A0\u9501
        orderLock.lock();
        try {
            //\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u4E0B\u5355
            RBucket<PlaceOrderResVO> orderCache = redissonClient.getBucket(RedisConstant.PLACE_ORDER_LOCK_KEY+reqVO.getRequestId());
            if(orderCache.isExistes){
                return orderCache.get();
            }
            //\u4E0B\u5355\u4E1A\u52A1\u903B\u8F91
            \u2026\u2026
            //\u843D\u5E93
            //\u8BA2\u5355\u843D\u5E93
            Order order = orderMapper.saveOrder(orderDO); 
            \u2026\u2026
            //\u7F13\u5B58\u7ED3\u679C
            orderCache.put(resVO);
            return resVO;
        } 
        } catch (Exception e) {
            //\u2026\u2026
        } finally {
            orderLock.unlock();
        }
        return resVO;
    }

\u8FD9\u91CC\u518D\u8BF4\u660E\u4E00\u4E0B\uFF1A

\u56E0\u4E3A\u4E0B\u5355\u91CC\u9762\u5176\u5B9E\u8FD8\u6709\u4E00\u4E9B\u5176\u5B83\u7684\u4E1A\u52A1\u6D41\u7A0B\uFF0C\u6BD4\u5982\u9501\u5E93\u5B58\u3001\u6E05\u4F18\u60E0\u5238\u2026\u2026\u800C\u6B64\u65F6\uFF0C\u83B7\u53D6\u5230\u9501\u7684\u8BF7\u6C42\u7684\u4E0B\u5355\u6D41\u7A0B\u8FD8\u6CA1\u6709\u7ED3\u675F\uFF0C\u4E0B\u5355\u7684\u7ED3\u679C\u8FD8\u83B7\u53D6\u4E0D\u5230\uFF0C\u6CA1\u6CD5\u5B8C\u6210\u54CD\u5E94\uFF0C\u4E5F\u5C31\u6CA1\u529E\u6CD5\u505A\u5E42\u7B49\u3002

\u5BA2\u6237\u7AEF\uFF0C\u4E5F\u53EF\u4EE5\u6839\u636E\u54CD\u5E94\u7684\u72B6\u6001\u7801\uFF0C\u8FDB\u884C\u7279\u6B8A\u5904\u7406\uFF0C\u6BD4\u5982\u8FD9\u4E2A\u5F02\u5E38\u5148\u4E0D\u63D0\u793A\uFF0C\u4F46\u662F\u5141\u8BB8\u7528\u6237\u518D\u6B21\u70B9\u51FB\u4E0B\u5355\u6309\u94AE\uFF0C\u6765\u63D0\u5347\u7528\u6237\u7684\u4F53\u9A8C\u3002


\u597D\u4E86\uFF0C\u8FD9\u4E00\u7BC7\u7B80\u5355\u7684\u5C0F\u6587\u7AE0\u5C31\u8FD9\u6837\u7ED3\u675F\u4E86\u3002

\u6700\u8FD1\u5DE5\u4F5C\u5B9E\u5728\u592A\u5FD9\u4E86\uFF0C\u57FA\u672C\u4E0A\u6BCF\u5929\u90FD\u662F\u4E5D\u70B9\u591A\u3001\u5341\u70B9\u591A\u4E0B\u73ED\uFF0C\u5199\u65B0\u7684\u6587\u7AE0\uFF0C\u8FD8\u6709\u300A\u9762\u6E23\u9006\u88AD\u624B\u518C\u300B\u7684\u7EF4\u62A4\uFF0C\u90FD\u4F1A\u52AA\u529B\u62BD\u65F6\u95F4\u53BB\u505A\uFF0C\u8C22\u8C22\u5927\u5BB6\u7684\u7406\u89E3\u548C\u652F\u6301\uFF01


\u53C2\u8003\uFF1A

[1]. \u91CD\u590D\u4E0B\u5355\uFF1Ahttps://blog.csdn.net/yangguosb/article/details/106095858)

[2]. \u7528\u5E42\u7B49\u9632\u6B62\u91CD\u590D\u8BA2\u5355\uFF1Ahttps://cloud.tencent.com/developer/article/1121727

- END -

`,51),m=e("\u8F6C\u8F7D\u94FE\u63A5\uFF1A"),h={href:"https://mp.weixin.qq.com/s/Dc_4taB6Boojdw_0mngroQ",target:"_blank",rel:"noopener noreferrer"},g=e("https://mp.weixin.qq.com/s/Dc_4taB6Boojdw_0mngroQ"),_=e("\uFF0C\u51FA\u5904\uFF1A\u4E09\u5206\u6076\uFF0C\u6574\u7406\uFF1A\u6C89\u9ED8\u738B\u4E8C");function f(O,x){const n=s("ExternalLinkIcon");return a(),c("div",null,[i("p",null,[o,i("a",v,[p,r(n)]),u]),b,i("blockquote",null,[i("p",null,[m,i("a",h,[g,r(n)]),_])])])}var k=d(l,[["render",f],["__file","ruhfzcfxd.html.vue"]]);export{k as default};