目录

1.CDN静态页面加速

2.redis做后端缓存

3,执行秒杀:

4.瓶颈分析:

5.优化分析:

6.优化总结


秒杀系统优化性能的思路:

写入内存而不是写入硬盘,异步处理而不是同步处理、分布式处理。

1.CDN静态页面加速

2.redis做后端缓存

redis优化地址暴露接口

引入自定义序列化工具(protostuff)序列化java对象到redis。

3,执行秒杀:

原子计数器---redis/nosql (incr限制一个phone/一个session在规定时间内的请求次数)

记录行为消息---分布式MQ

消费消息并落地---MySQL

4.瓶颈分析:

update 减库存 rowLock

|(网络延迟/GC)

insert 购买明细

|(网络延迟/GC)

commit/rollback freeLock

5.优化分析:

行级锁在commit之后释放

  1. 优化方向:减少行级锁持有时间。

  2. 把客户端逻辑放到MYSQL服务器,避免网络延迟和GC的影响。(使用存储过程:整个事务在MySQL断完成)。

简单优化

将insert和update语句调换位置(insert会返回影响的行数)。 因为只有update时才锁,所以将insert放到前面会较少行锁持有时间。

存储过程替代java与Mysql逻辑过程

--秒杀执行存储过程 DELIMITER $$ --console ;转换为 $$ --定义存储过程 --参数: in 输入参数;out 输出参数 --row_cout();返回上一条修改类型sql(delete,insert,update)的影响行数 --row_count();0未修改;>0修改的行数;<0 sql错误 CREATE PROCEDURE seckill.execute_seckill(in v_seckill bitint,in v_phone bigint, in v_kill_time timestamp,out r_result int) BEGIN DECLARE insert_cout int DEFAULT 0; START TRANSACTION; insert ignore into success_killed(seckill_id,user_phone,create_time) values (v_seckill_id,v_phone,v_kill_time); select row_count() into insert_count; IF(insert_count <0) THEN ROLLBACK; set r_resout = -1; ELSEIF(insert_count<0) THEN ROOLBACK; SET R_RESULT = -2; ELSE update seckill set number=number-1 where seckill_id=v_seckill_id and end_time> v_kill_time and start_time< v_kill_time and number>0 into insert_count; IF(inser_count==0) THEN ROLLBACK; set r_result = 0; ELSEIF(insert_count<0) THEN ROLLBACK; set r_result = -2; ELSE COMMIT; set r_result = 1; END IF; END IF; END; $$ DELIMITER ;

set @r_result=-3; call execute_seckill(1003,1350327,new(),@r_result);

select @r_result;

6.优化总结

前端控制:暴露接口,按键防重复(jquery按键防重复one事件)

动静态数据分离:CDN缓存,后端缓存

事务竞争优化:较少事务锁时间

Java秒杀高并发总结相关推荐

  1. 【在线网课】Java高性能高并发秒杀系统方案优化实战

    java教程视频讲座简介: Java高性能高并发秒杀系统方案优化实战 Java秒杀系统方案优化 高性能高并发实战 以"秒杀"这一Java高性能高并发的试金石场景为例,带你通过一系列 ...

  2. java处理高并发高负载类网站的优化方法

    java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...

  3. java处理高并发高负载类网站问题

    java处理高并发高负载类网站问题 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MyS ...

  4. Java架构-高并发的解决实战总结方案

    Java架构-高并发的解决实战总结方案 1.应用和静态资源分离 刚开始的时候应用和静态资源是保存在一起的,当并发量达到一定程度的时候就需要将静态资源保存到专门的服务器中,静态资源主要包括图片.视频.j ...

  5. Java JUC高并发编程(三)-CallableJUC辅助类

    目录 一.Callable接口 二.JUC辅助类 1.减少计数CountDownLatch 2.循环栅栏CyclicBarrier 3.信号灯Semaphore 一.Callable接口 Callab ...

  6. Java JUC高并发编程(一)

    目录 一.概述 二.Lock接口 三.线程间的通信 解决虚假唤醒问题 Lock通信示例: 四.线程间定制化通信 一.概述 JUC就是java.util.concurrent工具包的简称,这是一个处理线 ...

  7. java 12306高并发抢票_PHP 高并发、抢票、秒杀 解决方案

    对于抢票.秒杀这种业务,我说说自己对这种高并发的理解吧,这里提出个人认为比较可行的几个方案: 方案一:使用队列来实现 可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧 比如有1 ...

  8. Java解决高并发秒杀商品

    在看本文章之前,需要了解Spring boot搭建和使用 ,本篇文章核心问题是如何解决高并发问题. 开发环境:redis缓存4.0.1,Rabbitmq消息队列,Erlang(这个跟MQ环境有关,先安 ...

  9. Java分布式系统高并发解决方案

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...

最新文章

  1. 总结一下MySQL中的锁机制
  2. 聚合函数 -AVG/MAX/MIN/STDDEV/VARIANCE/SUM/COUNT/MEDIAN
  3. html(1)基本组成
  4. DP Big Event in HDU
  5. ListView和RecycleView的性能比对
  6. Linux详解系列2- 这100条常见命令你都用过哪些?
  7. 嘿嘿。今天学习了AJAX的几个方法
  8. Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架
  9. php小偷cookie,php小偷程序新概念之实时更新(二) | 学步园
  10. Eclipse —— 官网下载地址
  11. 人行地区代码一览表_全国各地区代码.
  12. 韩顺平的php东方航空_韩顺平PHP从入门到精通视频教程
  13. 服务器基线扫描修复,怎么对服务器进行基线和漏洞扫描
  14. 线性代数笔记8:矩阵的对角化
  15. 如何利用 XMind 高效学习?
  16. C/C++宏的特殊符号
  17. numpy_3数组的操作-变形
  18. CPP头文件中不应包含using声明
  19. 读书笔记-MongoDb-简介
  20. mre下的控件实现(四、Button使用)

热门文章

  1. Unity 音乐播放全局类
  2. 个人博客搭建-Hexo(gitee篇)
  3. 30个简单技巧提升你的Python编程(上)
  4. 山东县市区矢量地图.shp较新
  5. android中改变label字体颜色,IOS开发-UILabel自定义样式--同一个Label中不同颜色、字体...
  6. 使用Visual Studio Code 第一次开发C# 运行Hello World!
  7. vue 移动端点击延迟_vue移动端项目-click事件在浏览器中延迟300ms的解决方法
  8. 让人工智能有情感的秘诀!清华权威报告看透情感计算【附下载】
  9. 自媒体运营入门基础知识,六大运营要素分享
  10. oracle+中子分类账,Oracle EBS R12 总帐和子分类账关系详解[转载]