高并发系统如何做性能优化?如何防止库存超卖?

Posted 四猿外

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高并发系统如何做性能优化?如何防止库存超卖?相关的知识,希望对你有一定的参考价值。

高并发系统性能优化:

优化程序,优化服务配置,优化系统配置

1.尽量量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量量减少与数据库的交互,提高性能。

2.用jprofiler等工具找出性能瓶颈,减少额外的开销。

3.优化数据库查询语句句,减少直接使用hibernate等工具的直接生成语句句(仅耗时较长的查询做优化)。

4.优化数据库结构,多做索引,提高查询效率。

5.统计的功能尽量量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行行统计的功能。

6.能使用静态页面的地方尽量量使用,减少容器的解析(尽量量将动态内容生成静态html来显示)。

7.解决以上问题后,使用服务器集群来解决单台的瓶颈问题。

防止库存超卖:

1、悲观锁:在更更新库存期间加锁,不不允许其它线程修改;

  • 1、数据库锁:select xxx for update;

  • 2、分布式锁;

2、乐观锁:使用带版本号的更更新。每个线程都可以并发修改,但在并发时,只有一个线程会修改成功,其它会返回失败。

  • 1、redis watch:监视键值对,作用时如果事务提交exec时发现监视的监视对发生变化,事务将被取消。

3、消息队列列:通过 FIFO 队列列,使修改库存的操作串串行行化。

4、总结:总的来说,不不能把压力力放在数据库上,所以使用 “select xxx for update” 的方式在高并发的场景下是不不可行行的。FIFO同步队列列的方式,可以结合库存限制队列列长,但是在库存较多的场景下,又不不太适用。所以相对来说,我会倾向于选择:乐观锁 / 缓存锁/ 分布式锁的方式。

以上是关于高并发系统如何做性能优化?如何防止库存超卖?的主要内容,如果未能解决你的问题,请参考以下文章

利用Redis设计库存系统的苦与乐

如何解决高并发秒杀的超卖问题

使用Lua脚本通过原子减防止超卖

转 mysql处理高并发,防止库存超卖

mysql处理高并发,防止库存超卖

MySQL处理高并发,防止库存超卖