Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

ASinby/OverSoldDemo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

1 Commit

Repository files navigation

一、工程简介

  • 阅读《深入浅出SpringBoot2.0x》实操
    • 分别使用悲观锁、乐观锁以及Redis解决超卖问题

二、延伸阅读

1、悲观锁

优点:实现简单,只需要在读取库存的SQL后面加上FOR UPDATE 即可。
缺点:由于加FOR UPDATE后,若多线程同时查询数据,先抢占到资源的进程会独占锁,直至其操作完成后释放锁,其他线程才会继续。故此,就会导致性能低下。这样就有了乐观锁。

2、乐观锁

优点:高效。
缺点:由于使用版本号去控制库存的减少,这就会出现有大量请求失败。故此,就需要在原有乐观锁加上限制重入次数或是限制重入时间。

3、Redis

  • 1、在Linxu系统中使用docker 拉取一个Redis容器
  • 2、进入redis客户端,初始化库存即可
     ## 进入redis镜像 docker exec -it <镜像id或者名称> redis-cli -a <登录密码>
     docker exec -it 874693c1 redis-cli -a 123456
     ## 初始化redis产品库存
     hmset product_1 id 1 stock 100 price 5.00

三、其他笔记

  • 1、Mybatis的 *Mapper.xml文件必须放在resource文件夹下面
  • 2、非前后端分离项目 html、js等文件必须放在static文件夹下面
  • 3、之前不明白的——为什么非得把主要业务代码写在Service中,而不是Controller中。现在明白啦——在不更改对外接口的情况下,只需修改接口中service,即可完成不同业务代码之间的切换。
  • 4、Mybatis-puls的使用
  • 5、注解@Configuration@ConditionalOnProperty的配合使用——@ConditionalOnProperty加载配置文件中的配置,判断@Configuration是否生效。

四、参考

About

解决超卖问题例子项目

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /