# seckill **Repository Path**: zlray/seckill ## Basic Information - **Project Name**: seckill - **Description**: 简单的秒杀系统 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-12-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README redis并没有实现内部序列化操作:get->byte[] ==>反序列化 ->Object(Seckill类型) 采用自定义序列化:protostuff : pojo ``` com.dyuproject.protostuff protostuff-core 1.0.8 com.dyuproject.protostuff protostuff-runtime 1.0.8 ``` ``` byte[] bytes = jedis.get(key.getBytes()); // 缓存中获取到 if(bytes != null){ Seckill seckill = schema.newMessage();//创建空的对象 ProtostuffIOUtil.mergeFrom(bytes,seckill,schema); // seckill 被反序列 return seckill; ``` ``` byte[] bytes = ProtostuffIOUtil.toByteArray(seckill,schema, LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE)); ``` 双重检测取缓存 ``` private volatile static Seckill seckill; ....... seckill = redisDao.getSeckill(seckillId); if(null == seckill){ synchronized(this) { seckill = redisDao.getSeckill(seckillId); if(null == seckill) { //2:访问数据库,表示没有从缓存中取到数据; seckill = seckillDao.queryById(seckillId); if(null == seckill){ return new Exposer(false,seckillId); }else { //3:放入redis redisDao.putSeckill(seckill); } } } } ``` ![红色部分是可优化部分](https://gitee.com/uploads/images/2018/0104/093603_bed2ea8c_1370933.png "11.png") ![输入图片说明](https://gitee.com/uploads/images/2018/0104/093856_968d8b69_1370933.png "123.png")![输入图片说明](https://gitee.com/uploads/images/2018/0104/093826_c78d1f4c_1370933.png "13.png")![输入图片说明](https://gitee.com/uploads/images/2018/0104/093950_2d3177b4_1370933.png "15.png")![输入图片说明](https://gitee.com/uploads/images/2018/0104/093737_3004b56f_1370933.png "14.png")