一款简单又好用的序列化工具-Protostuff,及配合Jedis的使用

之前我们谈到使用Jedis存储数据时,需要先进行序列化,[RedisTemplate和Jedis的区别],那么现在我们就来介绍一款非常好用的序列化工具-protostuff,然后再讲讲它如何配合Jedis进行使用
话不多说,直接上代码,首先看看它如何使用:

首先还是要引入依赖
<dependency>
    <groupId>com.dyuproject.protostuff</groupId>
    <artifactId>protostuff-runtime</artifactId>
    <version>1.1.5</version>
</dependency>
<dependency>
    <groupId>com.dyuproject.protostuff</groupId>
    <artifactId>protostuff-core</artifactId>
    <version>1.1.5</version>
</dependency>

然后就可以进行使用

//定义一个Demo类
class Demo{
    int value;
    //此处省略构造函数和get,set函数
 }
 
class ProtostuffUtil {
   //进行序列化,以demo对象作为参数
    public static byte[] serialize(Demo demo){
        RuntimeSchema<Demo> schema = RuntimeSchema.createFrom(Demo.class);
        byte[] bytes = null;
            try{
                bytes = ProtostuffIOUtil.toByteArray(demo,schema, LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));
            }catch (Exception e) {
                throw new RuntimeException("serialize exception");
            }
        return bytes;
    }
    //进行反序列化
    public static Demo deSerialize(byte[] bytes,Demo demo){
        RuntimeSchema<Demo> schema = RuntimeSchema.createFrom(Demo.class);
        try{
            demo = schema.newMessage();
            ProtostuffIOUtil.mergeFrom(bytes,demo,schema);
            return demo;
        }catch (Exception e) {
            throw new RuntimeException("serialize exception");
        }
    }
    

配合Jedis进行测试

    public static void main(String[] args){
        Jedis jedis = new Jedis();
        Demo demo = new Demo(3);
        //对demo实例进行序列化
        byte[] bytes = ProtostuffUtil.serialize(demo);
        //将序列化后的demo存入redis
        jedis.set("hello".getBytes(),bytes);
       //利用key得到序列化后的demo实例
       byte[] resByte = jedis.get("hello".getBytes());
       //将demo实例反序列化
       Demo res = ProtostuffUtil.deSerialize(bytes,new Demo());
       System.out.println(res.value);
   }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Jedis提供了多种序列化器,可以通过配置来选择使用不同的序列化器。下面以使用Jackson序列化器为例,介绍如何在Jedis使用指定的序列化器: 1. 添加依赖,包括jedis和jackson-databind: ``` <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.4</version> </dependency> ``` 2. 创建JedisPoolConfig对象,设置Jedis连接池的相关参数: ``` JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(100); poolConfig.setMaxIdle(20); poolConfig.setMinIdle(10); ``` 3. 创建JedisPool对象,并设置Jackson序列化器: ``` JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379); ObjectMapper objectMapper = new ObjectMapper(); Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); jedisPool.getResource().getClient().setSerializer(jackson2JsonRedisSerializer); ``` 这里使用了Jackson2JsonRedisSerializer作为Jedis序列化器,并将ObjectMapper对象设置为其内部使用的ObjectMapper。这里还需要使用JedisPool的getResource方法获取Jedis实例,并使用getClient方法获取Jedis的客户端对象,然后调用setSerializer方法设置序列化器。 4. 使用Jedis实例操作Redis: ``` Jedis jedis = jedisPool.getResource(); String key = "myKey"; MyObject myObject = new MyObject(); byte[] bytes = jackson2JsonRedisSerializer.serialize(myObject); jedis.set(key.getBytes(), bytes); byte[] result = jedis.get(key.getBytes()); MyObject myObjectResult = (MyObject) jackson2JsonRedisSerializer.deserialize(result); ``` 这里使用Jedis实例来进行Redis的操作,其中包括将一个Java对象序列化为JSON格式,并存储到Redis中,以及从Redis中获取数据,并将其反序列化为Java对象。需要注意的是,在序列化和反序列化时,使用了之前创建的Jackson2JsonRedisSerializer对象来处理数据。 通过以上步骤,我们就可以在Jedis使用指定的序列化器来进行数据的序列化和反序列化了。需要根据实际情况选择合适的序列化器,并进行相应的配置。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值