Protostuff是一個高效的Java序列化框架,它使用基於協定緩衝區(Protocol Buffers)的二進制編碼格式,可以將對象序列化為緊湊且高效的字節數據。相比於JVM默認的Java序列化方式,Protostuff在效率上具有一些優勢。
此处的断点调试方法可以学习
序列化工具对比
详情页优化流程分析
redis 好课
详情页:做静态化放到CDN中,各个公司CDN不同,不细讲
系统时间部分:new了一个对象,很简单很快,不用优化
地址暴露接口(高并发点): 不方便做成静态放到CDN中,需要放到服务器端,通过逻辑去控制;但是该接口调用频繁,不希望放到数据库中-->使用redis优化.
执行秒杀操作:高并发点
代码增加redis访问
在serviceImpl中注入redis层的数据
protostuff
看不懂的同学,请看这里
优化的部分
redis protostuff 序列化对象效率比较高
redis数据缓存,自定义序列化,提高转化效率。
redis 缓存序列化优化
dbsize
keys *
get seckill:1001
redis-cli -p 6379 (进入redis命令台)
redis-server (启动redis服务)
make install (安装对应redis命令)
make (安装 redis)
redis缓存工具的使用,以及配置
向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先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
1、序列化对象
2、 Jedis 客户端
序列化采用Google的protostuff类工具
序列化和反序列化,用于缓存到redis中,我以前是用的是Jackson包实现的json->java object的转化,老师使用到了Protostuff,性能更好一些。
下载并安装redis,添加pom依赖 Jedis
new JedisPool(String ip,int port)
序列化--自定义序列化:portostuff-core/portostuff-runtime
https://github.com/eishay/jvm-serializers/wiki