程序员修炼营
免费分享最新的编程资源、实用工具等。
这是整个秒杀项目的最后一部分了,主要介绍关于秒杀的高并发优化。首先分析秒杀的瓶颈所在,然后再针对瓶颈进行优化。
一、秒杀系统高并发优化分析
首先我们来思考一下高并发情况会发生在哪?
如下图业务流程,红色部分就代表了可能发生高并发的点
并发优化主要通过三个角度来优化:CDN、redis优化exportSeckillUrl接口方法、mysql Procedure优化executeSeckill接口方法。
静态资源CDN优化
CDN(内容分发网络)理解:加速用户获取数据的系统,部署在离用户最近的网络节点上,命中CDN后不需要访问后端服务器,互联网公司自己搭建或租用CDN服务器。detail页静态化、静态资源css、js等部署在CDN上。
detail页静态化、静态资源css、js等可以部署在CDN上。
CDN只适合做静态资源的缓存,动态资源更适合使用redis这种服务器端缓存,方便业务代码控制。
二、redis后端缓存优化
该部分目的是使用redis优化地址暴露接口,即exportSeckillUrl接口方法。
①首先下载并安装redis
到官网https://redis.io/下载对应的安装包,安装redis,redis-server启动服务器,redis-cli -p 6379 连接本地服务器
②pom.xml文件中引入相关依赖
③优化SecKillServiceImpl类中的exportSecKillUrl()方法
主要进行优化的就是下面这句数据库操作
由于所有秒杀操作都要访问这个方法,所以我们可以使用redis缓存起来,这样可以降低mysql数据库的压力。
dao包下新建cache包,新建RedisDao类。
jedisPool相当于数据库连接池,jedis相当于数据库connection。
从数据库取出的是二进制数组,注意反序列化为javaPOJO,通过protostuff反序列化,速度比原生jdk序列化接口快两个数量级,空间只占原来的1/10。
dao/cache/下新建RedisDao类,编写redis的put,get常用方法。
spring-dao.xml中加入redisDao的Bean
在Service层的exportSeckillUrl方法中,先从redis缓存中获取数据,如果命中,继续执行,如果未命中,从数据库中查找,在put到redis中。
领取专属 10元无门槛券
私享最新 技术干货