学习笔记:
高并发秒杀延迟的真正原因:
1. java客户端与mysql交互的网络延迟,耗时1ms
2. java客户端GC(java垃圾回收),耗时50ms
而Mysql语句执行同一行(同一商品)的减库存update操作,耗时仅有0.025ms,即1秒可以卖4万个热点商品(4万qps),非同一商品,1秒可以卖40万个热点商品
优化方案: 不要在 java客户端控制事务,将事务操作放到Mysql端处理,以避免网络延迟和GC
详情看视频:https://www.imooc.com/video/11822
Mysql存储过程:
利用Mysql存储过程,实现事务行级锁持有时间,即在Mysql端事务处理避免网络延迟和GC
应用场景:仅限于简单固定的事务逻辑,不使用于互联网复杂的场景
详情看视频:https://www.imooc.com/video/11825
redis缓存优化实现步骤:
1. 下载redis数据库,添加依赖jedis,在DAO层添加RedisDao
2. 存储到redis:序列化java对象成为byte数组,存储在redis中
取出从redis:反序列化byte数组为java对象,在java客户端使用
3. dao层需要单元测试,先试着从redis中取,取不到再从数据库中取
提升Java序列化性能:使用protostuff工具(添加依赖)
详情看视频:https://www.imooc.com/video/11823