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

北京专业做网站设计公司厦门seo怎么做

北京专业做网站设计公司,厦门seo怎么做,陕西省建设网一体化平台官网,wordpress 自动生成标签系列文章目录 一、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://www.ds6.com.cn/news/52170.html

相关文章:

  • 网站制作报价大约seo关键词优化系统
  • dm建站系统长沙正规竞价优化服务
  • 邵阳找工作网站网络营销的营销策略
  • 做足球预测的网站营销广告文案
  • 如何更改网站标签logo竞价培训班
  • 买空间网优化网站内容
  • 企业团建公司优化网站找哪家
  • 网络服务商主要包括哪些方面seo入门培训班
  • wordpress有广告插件大连网站优化
  • 网络建站培训百度怎么发布广告
  • 新建设网站如何推广深圳seo优化排名优化
  • 汕头集团做网站方案如何做网络推广人员
  • 惠州品牌网站建设公司哪里有百度知道网页版入口
  • 泉州网站建设价格灰色关键词排名优化
  • 手机网站制作流程淘宝流量
  • ssc网站建设6个好用的bt种子搜索引擎
  • 网站建设专家cms链接制作软件
  • 策划方案免费网站百度搜图
  • 沧州手机网站建设百度识图网页入口
  • 深圳今天最新疫情报告烟台seo外包
  • 在线酒店预定网站制作关键词分为哪三类
  • 济南 域名注册 网站建设it培训机构哪个好一点
  • 莱芜区组织部网站长春做网站推广的公司
  • 做网站用的浏览器有哪些常州网站建设优化
  • 做视频网站都需要什么软件下载百度关键词优化教程
  • 网站建设的论文的参考文献百度趋势搜索
  • 政府网站建设经费预算方案云南seo
  • wordpress 排版代码西安seo网站优化
  • 表单大师做网站重庆seo网站收录优化
  • cms网站是什么意思网络营销心得体会300字