基于SSM实现高并发秒杀Web项目

程序员修炼营

免费分享最新的编程资源、实用工具等。

这是整个秒杀项目的最后一部分了,主要介绍关于秒杀的高并发优化。首先分析秒杀的瓶颈所在,然后再针对瓶颈进行优化。

一、秒杀系统高并发优化分析

首先我们来思考一下高并发情况会发生在哪?

如下图业务流程,红色部分就代表了可能发生高并发的点

并发优化主要通过三个角度来优化: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中。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180603G1ARG700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券