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

黄石网站设计公司绝对正品的购物app

黄石网站设计公司,绝对正品的购物app,设计师可以接单的网站,中山网站建设备案文章目录 使用数据锁#xff1a;悲观锁 或者 乐观锁悲观锁乐观锁mysql锁总结 使用数据锁#xff1a;悲观锁 或者 乐观锁 一个sql#xff1a;直接更新时判断#xff0c;在更新中判断库存是否大于0 update table set surplus (surplus - buyQuantity) where id 1 and (surp… 文章目录 使用数据锁悲观锁 或者 乐观锁悲观锁乐观锁mysql锁总结 使用数据锁悲观锁 或者 乐观锁 一个sql直接更新时判断在更新中判断库存是否大于0 update table set surplus (surplus - buyQuantity) where id 1 and (surplus - buyQuantity) 0 ; 悲观锁在读取数据时锁住那几行其他对这几行的更新需要等到悲观锁结束时才能继续 。 select … for update 乐观锁读取数据时不锁更新时检查是否数据已经被更新过如果是则取消当前更新进行重试。 version 或者 时间戳CAS思想。 悲观锁 在MySQL的InnoDB中预设的Tansaction isolation level 为REPEATABLE READ可重读 在SELECT 的读取锁定主要分为两种方式 SELECT … LOCK IN SHARE MODE 共享锁SELECT … FOR UPDATE 悲观锁这两种方式在事务(Transaction) 进行当中SELECT 到同一个数据表时都必须等待其它事务数据被提交(Commit)后才会执行。而主要的不同在于LOCK IN SHARE MODE 在有一方事务要Update 同一个表单时很容易造成死锁。简单的说如果SELECT 后面若要UPDATE 同一个表单最好使用SELECT … FOR UPDATE。 代码实现 改造StockService 在StockeMapper中定义selectStockForUpdate方法 public interface StockMapper extends BaseMapperStock {public Stock selectStockForUpdate(Long id); }在StockMapper.xml中定义对应的配置 ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.atguigu.distributedlock.mapper.StockMapperselect idselectStockForUpdate resultTypecom.atguigu.distributedlock.pojo.Stockselect * from db_stock where id #{id} for update/select /mapper压力测试 注意测试之前需要把库存量改成5000。压测数据如下比jvm性能高很多比无锁要低将近1倍 mysql数据库存 乐观锁 乐观锁 Optimistic Locking 相对悲观锁而言乐观锁假设认为数据一般情况下不会造成冲突所以在数据进行提交更新的时候才会正式对数据的冲突与否进行检测如果发现冲突了则重试。那么我们如何实现乐观锁呢 使用数据版本Version记录机制实现这是乐观锁最常用的实现 方式。一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时将version字段的值一同读出数据每更新一次对此version值加一。当我们提交更新的时候判断数据库表对应记录 的当前版本信息与第一次取出来的version值进行比对如果数据库表当前版本号与第一次取出来的version值相等则予以更新。 给db_stock表添加version字段 对应也需要给Stock实体类添加version属性。此处略。。。。 代码实现 public void checkAndLock() {// 先查询库存是否充足Stock stock this.stockMapper.selectById(1L);// 再减库存if (stock ! null stock.getCount() 0){// 获取版本号Long version stock.getVersion();stock.setCount(stock.getCount() - 1);// 每次更新 版本号 1stock.setVersion(stock.getVersion() 1);// 更新之前先判断是否是之前查询的那个版本如果不是重试if (this.stockMapper.update(stock, new UpdateWrapperStock().eq(id, stock.getId()).eq(version, version)) 0) {checkAndLock();}} }重启后使用jmeter压力测试工具结果如下 修改测试参数如下 测试结果如下 说明乐观锁在并发量越大的情况下性能越低因为需要大量的重试并发量越小性能越高。 mysql锁总结 性能一个sql 悲观锁 jvm锁 乐观锁 如果追求极致性能、业务场景简单并且不需要记录数据前后变化的情况下。 ​ 优先选择一个sql 如果写并发量较低多读争抢不是很激烈的情况下优先选择乐观锁 如果写并发量较高一般会经常冲突此时选择乐观锁的话会导致业务代码不间断的重试。 ​ 优先选择mysql悲观锁 不推荐jvm本地锁。
http://www.pierceye.com/news/577052/

相关文章:

  • 做网站推广广告房地产行业网站开发
  • 济宁网站建设 企业谷wordpress手机 不适应
  • 如何用php做网站合肥专业手机网站哪家好
  • 如何推广自己的网站和产品如何用dw做网站地图
  • 株洲有名的网站重庆市公路建设信息网官网
  • 网站安全证书出错怎么做dw网页制作素材网站
  • 收录查询 站长工具给网站做解答是干嘛的
  • 成都哪些公司可以做网站建网站现软件
  • 深圳wap网站建设传奇霸主页游
  • 做网站首先要干什么营销软文200字
  • 帝国cms做的网站私人定制女装店
  • 网站建设南沙wordpress video
  • 网站建设开票应该开哪个行业什么网站可以免费做视频的软件
  • 百度seo查询收录查询网站推广策划案seo教程
  • 如何免费建立网站中贤建设集团网站
  • 如何做转运网站黄聪 wordpress
  • 临海市住房与城乡建设规划局网站宁波网络推广培训
  • go 网站开发自己在线制作logo
  • 重庆市网站建设公司企业服务账号
  • 网站建设的市场情况网站系统里不能打印
  • 网站如何适应屏幕做网站时无法上传图片
  • 网站的橱窗怎么做嘉兴住房和城乡建设厅网站
  • 吉林省城乡建设官方网站163企业邮箱登录入口官网
  • 做网站参考文献某企业网站建设方案2000字
  • 网站托管哪家好织梦购物网站整站源码
  • 怎么做网站的优化排名wordpress的目录结构(一)
  • 个人可以做公益网站吗美食杰网站的建设目的
  • 宿迁公司企业网站建设《网站基础建设-首保》
  • 做全屏式网站尺寸是多大国外虚拟主机 两个网站
  • 黑龙江建设网站招聘广西住房和城乡建设厅培训中心官方网站