项目中并发下单的问题怎么解决?

个人记录:2018年,工作的第6到7个年头。

重点研究自己不太擅长的技术:分布式、高并发、大数据量、数据库优化、高性能、负载均衡等。


个人看法

第1次看到有人想到用“文件锁”的,总体感觉不靠谱。

首先,我想到的是,创建文件file.lock,创建成功算得到锁。创建失败,就没有。这种做法,感觉比较耗费io性能。没有写代码测试。

其次,看了作者的想法,只是提到了“文件锁”,没有具体说明。

然后专门看了一篇关于Java文件锁的文章,“

Java 进程间文件锁FileLock详解

http://blog.csdn.net/wangbaochu/article/details/48546717”。

如果真的只是“进程间”,根本无法解决分布式并发的问题。

然后,“innodb引擎,则它的锁只能支持行锁。(查询速度比较慢)”innodb是后来出的引擎,支持行级锁,这个有亲自测试select for update可以根据where条件,锁住全表、几行、一行。但是,查询速度比较慢,也太不靠谱了。

既然支持了行级锁,意味着引擎升级了,更牛逼了。

查询是最基本的需求,这个还慢,谁还用呢?

网友的评论比较靠谱,“nnodb 写操作不影响查询速度,查询是快照读”,这个点还需要再次学习下。(不会的真多哎)

最后,推荐redis和Zookeeper。

写这个“分布式锁”的经验文章很多。

个人偏好,能用“软件”就尽可能用“软件”,文件更侧重硬件和操作系统一点。

互联网系统,更加侧重软件思维。

-------------------------------------------------------------------------------

原文链接:http://blog.csdn.net/qq_33567603/article/details/52800320

项目中并发下单的问题怎么解决?

解决方法肯定是用文件锁了,具体怎么做看数据库区的mysql模块下的mysql锁。

使用文件锁,先试试有没有其他方法,具体如下。
背景知识:数据库存储引擎、表锁、文件锁。

数据库存储引擎:
如果是mysiam引擎,则它的锁只能支持表锁,所以要操作这个表的功能,都会被阻塞。这样做会拖慢整个网站的网速。
举个例子:

比如:我们下订单时,要锁定商品表,那么网站下订单的人非常多,那么商品表就一直处于被锁定的状态。

这样其他和商品表有关的操作,就会被阻塞!

而如果是innodb引擎,则它的锁只能支持行锁。(查询速度比较慢)

故使用文件锁。
下单流程:

加锁->当多个人同时购买时,操作系统的底层确保只有一个客户在进行操作,其他的只能阻塞。

->先取出商品库存量,检查库存量,下单,减少库存量。->解锁

然后其他客户再操作,流程与上相同。

你可能感兴趣的:(Java技术专家)