秒杀项目ssm总结(个人理解)

项目描述

所谓的秒杀就是类似双11的商品抢购操作,秒杀项目是一种高并发项目,它要求能处理很多人对一个商品的秒杀操作,这就要求你的打码需要有一定的优化和改进,在这个项目中我们利用了三点优化来提高并发性。
1、通过redis缓存商品信息。在项目中需要多次进行数据库商品信息的查询,例如取得商品id,开始时间和结束时间等等,这个时候如果都去访问数据库无疑会给数据库增加很大的压力,我们在这里做的一个优化就是通过redis来将商品信息缓存下来,以商品的id作为key,这样一来每次需要取得商品信息的时候直接访问redis就好了
2、调整sql语句的执行顺序。项目中有一个业务逻辑是这样的:减库存和将秒杀单插入成功秒杀表,这里涉及了两个数据库操作,update和insert。在进行update处理一行数据时,会获得行级锁,这在一定的程度上影响了insert操作的速度,为此我们将insert放在前面,先进行数据的插入,如果失败了回滚,成功了就执行update操作,这样能提高系统并发量
3、使用存储过程来执行sql语句以减少网络延迟和gc操作。存储过程是数据库的操作过程,它是作为解决复杂逻辑,如需要连接多张表或者进行多项操作的一种优化方法出现的,在存储过程执行的过程中,它把很多个逻辑统一执行后返回,不需要每执行一个逻辑就访问一次数据库并写回,这在很大程度上避免了数据传输过程中的网络延迟和gc操作

ssm框架搭建

1. 用eclipse创建meaven项目
2. 编写pom.xml文件,导入所需要的依赖,这里列举一下此项目所需要用到的包依赖(一般的ssm项目也会用到)

测试
junit 的 junit

日志
org.slf4j 的 slf4j-api
ch.qos.logback 的 logback-core
ch.qos.logback 的 logback-classic

数据库相关
mysql 的 mysql-connector-java
c3p0 的 c3p0
org.mybatis 的 mybatis
org.mybatis 的 mybatis-spring

servlet web相关
jstl 的 jstl
com.fasterxml.jackson.core 的 jackson-databin
avax.servlet 的 javax.servlet-api

spring核心
org.springframework 的 spring-core
org.springframework 的 spring-beans
org.springframework 的 spring-context

spring dao层
org.springframework 的 spring-jdbc
org.springframework 的 spring-tx

spring web层
org.springframework 的 spring-web
org.springframework 的 spring-webmvc

spring测试
org.springframework 的 spring-test

redis
redis.clients 的 jedis

protostuff序列化
com.dyuproject.protostuff 的 protostuff-core
com.dyuproject.protostuff 的 protostuff-runtime

处理map的工具
commons-collections 的 commons-collections

3. 创建三个大的包

包

4. 进行dao层的编程

在进行dao层的编写前,要根据数据库表来实现entity类的编写(实体),

dao层主要是一些单一的逻辑,编写的是接口,每一张表对应一个接口,每个接口中定义了若干个数据库操作方法,这些方法的实现是在resources的mapper包下的xml中。因此你有多少个接口就应该对应有多少个xml文件。

xml文件用的是mybatis的语法,例子如下,如果你要用update语句,那么图中的select标签应该改为update
xml中的mybatis实现
需要注意的是如果你的dao接口中定义了多个参数,然后在xml中使用到了这些参数,mybatis是不能识别的,此时你需要使用@param(“参数名字”)来标识这个参数,例子如下

List<Seckill> queryAll(@Param("offset")int offset,@Param("limit")int limit);
5.dao层编写完毕后,需要编写配置文件

在resources包下新建一个spring的文件夹,里面放spring的配置
在spring文件夹中新建一个spring-dao.xml文件,里面放dao的配置

dao的配置一共有四步:
1、获取写有数据库相关参数的properties文件

	<context:property-placeholder location="classpath:jdbc.properties"/>

2、配置数据库连接池

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
   	<property name="driverClass" value="${driver}"/>
   	<property name="jdbcUrl" value="${url}"/>
   	<property name="user" value="${jdbc.username}"/>
   	<property name="password" value="${password}"/>
   	
   	<property name="maxPoolSize" value="30"></property>
   	<property name="minPoolSize" value="10"></property>
   	<!-- 关闭连接后不自动commit -->
   	<property name="autoCommitOnClose" value="false"></pro
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值