ProtoStuff序列化

今天在学习秒杀课程时,看到使用Redis做服务器端的缓存实现更快速的存取,知道redis没有实现内部序列化的操作,所以在处理数据时需要自己执行序列化与反序列化操作。记录下protostuff的使用。

首先引入protostuff的依赖

<!-- protostuff序列化依赖 -->
<dependency>
    <groupId>com.dyuproject.protostuff</groupId>
    <artifactId>protostuff-core</artifactId>
    <version>1.0.8</version>
</dependency>
<dependency>
    <groupId>com.dyuproject.protostuff</groupId>
    <artifactId>protostuff-runtime</artifactId>
    <version>1.0.8</version>
</dependency>

Reids存取过程序列化与反序列换操作(Seckill是一个类):

(1) get取数据:

// get -> byte[] -> 反序列化 -> Object(Seckill)
//采用自定义序列化,protostuff转换有get set方法的pojo.
byte[] bytes = jedis.get(key.getBytes());
if(bytes != null) {
    //空对象
    Seckill seckill = schema.newMessage();
    ProtostuffIOUtil.mergeFrom(bytes, seckill, schema);
    //seckill被反序列化
    return seckill;
}

(2) set存数据

//set Object(Seckill) -> 序列化   ->  byte[] 
String key = "seckill:" + seckill.getSeckillId();
byte[] bytes = ProtostuffIOUtil.toByteArray(seckill, schema, 
        LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));
//超时缓存
int timeout = 60*60;//1小时
String result = jedis.setex(key.getBytes(), timeout, bytes);
return result;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值