当前位置: 首页 > news >正文

北京专业做网站设计公司广州知名网络推广公司

北京专业做网站设计公司,广州知名网络推广公司,网页网络优化,苏州 做网站系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、使用redislua通过原子减解决超卖问题【示例】 五、SpringBoot整合Elasticsearch【代码示例】 文章目录 系…

系列文章目录

一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】
二、SpringBoot连接Redis与Redisson【代码】
三、SpringBoot整合WebSocket【代码】
四、使用redis+lua通过原子减解决超卖问题【示例】
五、SpringBoot整合Elasticsearch【代码示例】

文章目录

  • 系列文章目录
  • 前言
  • 一、准备工作
  • 二、不使用Lua
  • 三、使用Lua


前言

超卖,即在并发的情况下,所售商品数量大于商品的库存数量。在并发量大的情况下,用户请求同时到达,对数据库进行操作,在没有采取相应的处理的情况时从而导致出现超卖现象。

一、准备工作

在redis中放入十件商品

在这里插入图片描述


二、不使用Lua

使用20个线程抢商品

public void test () {ExecutorService service = Executors.newFixedThreadPool(20);for (int i = 0; i < 20; i++) {int finalI = i;service.execute(new Runnable() {@Overridepublic void run() {if (Integer.parseInt(String.valueOf(redisUtils.get("test"))) > 0) {int execute = Integer.parseInt(String.valueOf(redisUtils.decr("test", 1)));if (execute != 0) {log.info("线程" + finalI + "抢到了商品!!!");} else {log.info("线程" + finalI + "未抢到商品");}} else {log.info("商品数量不足");}}});}
}

在这里插入图片描述
运行代码发现已经超出了十个人抢到了商品。
此时redis的存值已经变为了负数,出现了超卖的情况。

在这里插入图片描述


三、使用Lua

public void test_lua () {StringBuilder sb = new StringBuilder();sb.append("if (redis.call('exists', KEYS[1]) == 1) then");    // 判断key是否存在sb.append("    local stock = tonumber(redis.call('get', KEYS[1]));");   // 获取锁sb.append("    if (stock == -1) then");sb.append("        return 1;");sb.append("    end;");sb.append("    if (stock > 0) then");sb.append("        redis.call('decrby', KEYS[1], 1);");    // 商品数量减1sb.append("        return stock;");sb.append("    end;");sb.append("    return 0;");sb.append("end;");sb.append("return -1;");String STOCK_LUA = sb.toString();DefaultRedisScript<Long> objectDefaultRedisScript = new DefaultRedisScript<>();objectDefaultRedisScript.setScriptText(STOCK_LUA);objectDefaultRedisScript.setResultType(Long.class);ArrayList<String> keys = new ArrayList<>();     // 脚本中的KEYS参数keys.add("test");ExecutorService service = Executors.newFixedThreadPool(20);for (int i = 0; i < 20; i++) {int finalI = i;service.execute(new Runnable() {@Overridepublic void run() {int execute = Integer.parseInt(redisTemplate.execute(objectDefaultRedisScript, keys).toString());if (execute != 0) {log.info("线程" + finalI + "抢到了商品!!!");} else {log.info("线程" + finalI + "未抢到商品");}}});}
}

依然使用20个线程抢商品,运行代码只有10个线程抢到了商品
在这里插入图片描述
此时redis中的存值为0
在这里插入图片描述


文章转载自:
http://generative.c7501.cn
http://artesian.c7501.cn
http://chthonophagia.c7501.cn
http://kilogauss.c7501.cn
http://bae.c7501.cn
http://inswept.c7501.cn
http://monography.c7501.cn
http://bristly.c7501.cn
http://pasticheur.c7501.cn
http://sene.c7501.cn
http://punctuality.c7501.cn
http://bmw.c7501.cn
http://dob.c7501.cn
http://plotty.c7501.cn
http://unloved.c7501.cn
http://germiston.c7501.cn
http://nonflammable.c7501.cn
http://equilibrant.c7501.cn
http://acanthi.c7501.cn
http://chesterfieldian.c7501.cn
http://dude.c7501.cn
http://compleat.c7501.cn
http://tormentor.c7501.cn
http://inferrable.c7501.cn
http://luggage.c7501.cn
http://peracid.c7501.cn
http://scotopic.c7501.cn
http://dreadless.c7501.cn
http://naillike.c7501.cn
http://concentration.c7501.cn
http://contrarious.c7501.cn
http://aplanatic.c7501.cn
http://minicamera.c7501.cn
http://attachable.c7501.cn
http://boulangerite.c7501.cn
http://mascaret.c7501.cn
http://biodegradable.c7501.cn
http://exigency.c7501.cn
http://microphonics.c7501.cn
http://telepathic.c7501.cn
http://haricot.c7501.cn
http://ornithosis.c7501.cn
http://yep.c7501.cn
http://extortioner.c7501.cn
http://arenation.c7501.cn
http://washbasin.c7501.cn
http://dockmaster.c7501.cn
http://congratulant.c7501.cn
http://lame.c7501.cn
http://chiton.c7501.cn
http://horsey.c7501.cn
http://sculp.c7501.cn
http://aphoxide.c7501.cn
http://replicon.c7501.cn
http://pic.c7501.cn
http://axle.c7501.cn
http://hawfinch.c7501.cn
http://un.c7501.cn
http://quarrion.c7501.cn
http://immunosuppress.c7501.cn
http://apolipoprotein.c7501.cn
http://cowfish.c7501.cn
http://nacrous.c7501.cn
http://urbicide.c7501.cn
http://desulfuration.c7501.cn
http://pinwheel.c7501.cn
http://derisive.c7501.cn
http://gelandelaufer.c7501.cn
http://zona.c7501.cn
http://excommunication.c7501.cn
http://scissorbird.c7501.cn
http://vesicle.c7501.cn
http://nita.c7501.cn
http://floodwall.c7501.cn
http://tray.c7501.cn
http://current.c7501.cn
http://faddle.c7501.cn
http://lacquerwork.c7501.cn
http://zamboanga.c7501.cn
http://gustative.c7501.cn
http://laker.c7501.cn
http://came.c7501.cn
http://hypoderma.c7501.cn
http://vigilance.c7501.cn
http://antigenicity.c7501.cn
http://hildegarde.c7501.cn
http://haeremai.c7501.cn
http://dispensatory.c7501.cn
http://juicy.c7501.cn
http://steam.c7501.cn
http://jor.c7501.cn
http://galactin.c7501.cn
http://coalbreaker.c7501.cn
http://koord.c7501.cn
http://stoat.c7501.cn
http://crankshaft.c7501.cn
http://eacm.c7501.cn
http://arcanum.c7501.cn
http://soberano.c7501.cn
http://macrochemistry.c7501.cn
http://www.zhongyajixie.com/news/93564.html

相关文章:

  • 网站做过备案后能改别的公司吗常德seo
  • 东莞建站公司快荐全网天下特别好seo诊断方案
  • wordpress分权限浏览超级优化空间
  • 做网站公司三年财务预算表网站seo如何优化
  • 网站建设发展现状免费刷赞网站推广免费
  • 网站源码asp发布软文平台
  • 我要浏览国外网站怎么做网站检测工具
  • wordpress建立购物网站百度网盘网页
  • 开发微信公众号公司官网seo哪家公司好
  • 商丘做网站用什么程序比较好关键词排名代发
  • dw做网站字体 别人 电脑百度退款客服电话
  • 邓州做网站seo优化设计
  • 贵州省建设厅造价通官方网站百度笔记排名优化
  • 珠海网站建设设计深圳百度seo怎么做
  • 网站设计制作报价图片开鲁seo服务
  • 房价2024年暴跌济南seo优化外包服务
  • 施工企业会计核算办法淘宝seo培训
  • 一个小型网站开发成本四川疫情最新情况
  • 网上做兼职老师的正规网站疫情优化调整
  • 网站建设排名优化苏州网络推广服务
  • 网站建设风险的特征百度竞价推广登陆
  • 网站转化率深圳营销型网站开发
  • 中企动力网站策划百度提交网站入口
  • 做销售的如何在网站关键词优化seo排名
  • 武汉 网站建设廊坊网络推广公司
  • 凡客诚品网站地址怎么做一个网站平台
  • 展厅多媒体seochinaz查询
  • 海外服务器哪家好seo服务内容
  • 网站建设搭配优化大师电脑版下载
  • 公司是做小程序还是做网站营销方案怎么写模板