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

开发者账号注册流程什么是seo是什么意思

开发者账号注册流程,什么是seo是什么意思,金昌网站建设,wordpress锚点什么是超卖?假如只剩下一个库存,却被多个订单买到了,简单理解就是库存不够了还能正常下单。 方案1:数据库行级锁 1. 实体类 Data TableName("product") public class Product {TableId(type IdType.AUTO)private Lon…

什么是超卖?假如只剩下一个库存,却被多个订单买到了,简单理解就是库存不够了还能正常下单。


方案1:数据库行级锁

1. 实体类

@Data
@TableName("product")
public class Product {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer stock;@Version // MyBatis-Plus乐观锁注解private Integer version;
}

2. Mapper接口

public interface ProductMapper extends BaseMapper<Product> {/​**​* 使用悲观锁查询商品* @param id 商品ID* @return 商品实体*/@Select("SELECT * FROM product WHERE id = #{id} FOR UPDATE")Product selectByIdWithLock(Long id);/​**​* 自定义乐观锁更新方法* @param product 商品实体* @param oldVersion 旧版本号* @return 更新影响行数*/@Update("UPDATE product SET stock = #{stock}, version = version + 1 " +"WHERE id = #{id} AND version = #{oldVersion}")int updateWithOptimisticLock(Product product, @Param("oldVersion") int oldVersion);
}

3. Service层实现

@Service
@RequiredArgsConstructor
public class ProductService {private final ProductMapper productMapper;/​**​* 使用行级锁扣减库存* @param productId 商品ID* @param quantity 扣减数量* @return 操作结果*/@Transactional(rollbackFor = Exception.class)public String reduceStock(Long productId, Integer quantity) {try {// 1. 加行级锁查询商品Product product = productMapper.selectByIdWithLock(productId);if (product == null) {return "商品不存在";}// 2. 检查库存是否充足if (product.getStock() < quantity) {return "库存不足";}// 3. 扣减库存product.setStock(product.getStock() - quantity);// 4. 更新库存int result = productMapper.updateById(product);if (result <= 0) {throw new RuntimeException("更新库存失败");}return "扣减库存成功";} catch (Exception e) {// 事务回滚throw new RuntimeException("扣减库存异常: " + e.getMessage());}}/​**​* 使用MyBatis-Plus内置乐观锁机制扣减库存* @param productId 商品ID* @param quantity 扣减数量* @return 操作结果*/@Transactional(rollbackFor = Exception.class)public String reduceStockWithOptimisticLock(Long productId, Integer quantity) {// 1. 查询商品(不加锁)Product product = productMapper.selectById(productId);if (product == null) {return "商品不存在";}// 2. 检查库存if (product.getStock() < quantity) {return "库存不足";}// 3. 扣减库存product.setStock(product.getStock() - quantity);// 4. 乐观锁更新int result = productMapper.updateById(product);if (result <= 0) {// 版本号不一致,说明数据已被修改return "操作失败,请重试";}return "扣减库存成功";}/​**​* 手动实现乐观锁扣减库存(带重试机制)* @param productId 商品ID* @param quantity 扣减数量* @return 操作结果*/@Transactional(rollbackFor = Exception.class)public String reduceStockManual(Long productId, int quantity) {// 1. 查询商品Product product = productMapper.selectById(productId);if (product == null) {return "商品不存在";}// 2. 检查库存是否充足if (product.getStock() < quantity) {return "库存不足";}// 3. 扣减库存product.setStock(product.getStock() - quantity);// 4. 手动乐观锁更新int result = productMapper.updateWithOptimisticLock(product, product.getVersion());if (result > 0) {return "扣减库存成功";}return "操作失败,请重试";}
}

方案2:分布式锁

1. 实体类

@Data
@TableName("product")
public class Product {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer stock;
}

2. Mapper接口

public interface ProductMapper extends BaseMapper<Product> {// 使用MyBatis-Plus自带方法/​**​* 自定义扣减库存方法* @param productId 商品ID* @param quantity 扣减数量* @return 影响行数*/@Update("UPDATE product SET stock = stock - #{quantity} WHERE id = #{productId} AND stock >= #{quantity}")int reduceStock(@Param("productId") Long productId, @Param("quantity") int quantity);
}

3. Service层实现

@Service
@RequiredArgsConstructor
public class ProductService {private final ProductMapper productMapper;private final RedissonClient redissonClient;/​**​* Redisson分布式锁*/public String reduceStockWithLock(Long productId, int quantity) {// 1. 创建分布式锁keyString lockKey = "product:lock:" + productId;RLock lock = redissonClient.getLock(lockKey);try {// 2. 尝试获取锁(等待5秒,锁自动释放时间30秒)boolean locked = lock.tryLock(5, 30, TimeUnit.SECONDS);if (!locked) {return "系统繁忙,请稍后再试";}try {// 3. 查询商品Product product = productMapper.selectById(productId);if (product == null) {return "商品不存在";}// 4. 检查库存是否充足if (product.getStock() < quantity) {return "库存不足";}// 5. 扣减库存int result = productMapper.reduceStock(productId, quantity);if (result <= 0) {return "扣减失败,请重试";}return "扣减成功";} finally {// 6. 释放锁// lock.isLocked()检查锁是否仍然被持有(未被释放)// lock.isHeldByCurrentThread()检查当前线程是否持有该锁if (lock.isLocked() && lock.isHeldByCurrentThread()) {lock.unlock();}}} catch (InterruptedException e) {Thread.currentThread().interrupt();return "系统异常,请重试";}}
}
http://www.dtcms.com/wzjs/314502.html

相关文章:

  • 做网站收入怎么样列表网推广效果怎么样
  • 网站建设有什么注意百度学术官网论文查重免费
  • 海西高端网站建设价格手机卡顿优化软件
  • 网站出现的问题建站之星官方网站
  • 网站作业免费下载制作网站需要的技术与软件
  • 龙岗网站优化公司案例湛江今日头条新闻
  • 做的比较好的旅行网站西安排名seo公司
  • 网站组网图黄金网站软件app大全下载
  • 网站样式模板下载seo推广绩效考核指标是什么
  • 只做外贸的公司网站sem竞价推广代运营
  • 集团企业网站建设广州推广引流公司
  • 网时代it培训官网关键词优化百家号
  • wordpress 首页title关键词优化排名用哪个软件比较好
  • 门户网站建设方法广州搜发网络科技有限公司
  • 基于 wordpress郑州seo关键词自然排名工具
  • 自动生成app以下哪个单词表示搜索引擎优化
  • 如何做别人的网站外贸网络营销推广
  • 丽水网站建设专业的公司seo资料
  • 教育局两学一做网站搜索排名优化软件
  • 电脑端网站一般做多宽最好高佣金app软件推广平台
  • 品牌网站建设如何在网上推广自己
  • 洪梅镇做网站推广学院seo教程
  • 微信广告投放收费标准自贡网站seo
  • mvc5网站开发项目下载b2b电子商务平台排名
  • 网站建设哪家好知乎营销型网站建设团队
  • cad dwt模板做网站模版免费创建个人博客网站
  • 武汉方林装饰公司地址seo关键词优化培训
  • 建设工程施工图审查系统网站aso100官网
  • 制作表白网站教程百度人工客服在线咨询
  • 高品质网站建设官网设计公司