-
【数据层技术回顾】mybatis中设计dao接口,每个dao方法对应一条sql语句
上层service调用组合这些dao方法完成业务逻辑
查看全部 -
3-1是简单优化:调整源码顺序,先insert,再update,最后commit/rollback
3-2 深度优化 事务SQL在MySQL端执行(存储过程)
查看全部 -
回顾事务执行
秒杀操作通过mysql的事务来完成。
查看全部 -
向jedis中存入对象:putSeckill
流程:先在pom文件中引入相关redis依赖,java一般通过jedis来访问redis,然后创建一个redisDao的类,写入jedispool,从jedispool中获取到jedis对象。主要是在写两个方法,一个是从redis中get对象,另一个是向jedis中存入对象(put)。
因为redis并没有实现自动序列化功能,所以实际put对象的时候是将数据库中取到的对象序列化成二进制数组,然后根据对象类的反射得到的scheme序列化对象并存到redis中。同样redis取出对象的时候取到的是一个二进制数组,需要根据scheme和一个空对象将二进制数组转换成相应的对象。
传递秒杀对象,获取秒杀对象。
查看全部 -
根据秒杀单的时间判断是否开始,结束,秒杀。放在服务器端,通过服务器端的逻辑去判断。
Make
Make install
Redis-server
Redis-cli 6279
用java访问本机的redis
Redis客户端是jedis,在pom.xml中引入jedis,protostuff的依赖
Ø 把对象转换为字节序列的过程称为对象的序列化。
Ø 把字节序列恢复为对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2)在网络上传送对象的字节序列。
在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
查看全部 -
*******【优化总结】*******
【详情页】可通过CDN优化
【获取系统时间不用优化,因为很快】
【秒杀地址暴露接口分析】无法使用CDN缓存,(因为秒杀地址是会变化的),适合服务器端缓存:redis等
【秒杀操作接口优化分析】
无法使用CDN缓存,后端缓存困难:库存更新一致性问题。一行数据竞争:热点商品。优化方式,减少事务锁时间。
查看全部 -
【如何放到MySQL服务端】
方案1,不推荐,很难支撑修改MySQL源码
方案2:事务在MySQL服务端完成。
查看全部 -
行级锁在commit或rollback后释放,
优化方向:减少行级锁持有时间
【如何判断update更新库存成功】
查看全部 -
异地机房 传输分析
查看全部 -
同城机房,延迟分析
查看全部 -
【Java客户端控制事务时出现的瓶颈】
每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
查看全部 -
方案痛点
【运维成本】
查看全部 -
执行秒杀-其他方案分析
这个方案可以抗住非常高的并发
查看全部 -
【秒杀地址暴露接口分析】
无法使用CDN缓存,(因为秒杀地址是会变化的)
适合服务器端缓存:redis等
一致性维护成本低:超时穿透/主动更新
查看全部 -
获取系统时间不用优化
查看全部
举报