# 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);
}
}
}
}
```
 