Protobuf序列化对象放到redis

安装Protobuf

构建模板

指定3.0+版本

syntax = "proto3";

message gps_data {
    int64 id = 1;
    string terminalId = 2;
    string dataTime = 3;
    double lon = 4;
    double lat = 5;
    float speed = 6;
    int32 altitude = 7;
    int32 locType = 8;
    int32 gpsStatus = 9;
    float direction = 10;
    int32 satellite = 11;
}

生成protof文件:

protoc -I=src/main/resource/proto 
--java_out=src/main/java src/main/resource/proto/protobuf.proto

引入依赖:

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.5.0</version>
</dependency>

如果使用json,引入依赖:

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java-util</artifactId>
    <version>3.5.0</version>
</dependency>

构建对象并序列化放到redis

        System.out.println("===== 构建一个GPS模型开始 =====");
        Protobuf.gps_data.Builder gps_builder = Protobuf.gps_data.newBuilder();
        gps_builder.setAltitude(1);
        gps_builder.setDataTime("2017-12-17 16:21:44");
        gps_builder.setGpsStatus(1);
        gps_builder.setLat(39.123);
        gps_builder.setLon(120.112);
        gps_builder.setDirection(30.2F);
        gps_builder.setId(100L);

        Protobuf.gps_data gps_data = gps_builder.build();
        byte[] bytes = gps_data.toByteArray();
        jedis.set("foo".getBytes(), bytes);

        System.out.println("========");

        bytes = jedis.get("foo".getBytes());

        Protobuf.gps_data gd = null;
        try {
            gd = Protobuf.gps_data.parseFrom(bytes);
        } catch (InvalidProtocolBufferException e) {
            e.printStackTrace();
        }

        System.out.println("id: " + gd.getAltitude() + ", time: " + gd.getDataTime());

redis结果:

127.0.0.1:6379> get foo
"\bd\x1a\x132017-12-17 16:21:44!\xbaI\x0c\x02+\a^@)9\xb4\xc8v\xbe\x8fC@8\x01H\x01U\x9a\x99\xf1A"

序列化成Json

        System.out.println("===== 使用gps 转成json对象开始 =====");

        String jsonFormatM = "";
        try {
            jsonFormatM = JsonFormat.printer().print(gps_builder);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println(jsonFormatM.toString());
        System.out.println("json数据大小:" + jsonFormatM.getBytes().length);
        System.out.println("===== 使用gps 转成json对象结束 =====");

转载于:https://my.oschina.net/u/1000241/blog/1796495

要在Java中获取Redis中的Protobuf序列化数据,你需要使用Redis的Java客户端库和Protobuf的Java库。以下是一个简单的示例代码,显示如何将Protobuf对象序列化并存储到Redis中,并从Redis中获取并反序列化Protobuf对象。 首先,确保你已经添加了RedisProtobuf的相关依赖。 ```java import redis.clients.jedis.Jedis; import com.google.protobuf.InvalidProtocolBufferException; public class RedisProtobufExample { public static void main(String[] args) { // 创建一个Redis连接 Jedis jedis = new Jedis("localhost"); // 创建一个Protobuf对象 YourProtobufMessage message = YourProtobufMessage.newBuilder() .setId(1) .setName("John Doe") .setEmail("johndoe@example.com") .build(); // 将Protobuf对象序列化为字节数组 byte[] serializedMessage = message.toByteArray(); // 存储序列化的字节数组到Redis中 jedis.set("protobufData", serializedMessage); // 从Redis中获取序列化的字节数组 byte[] retrievedData = jedis.get("protobufData"); try { // 将字节数组反序列化Protobuf对象 YourProtobufMessage retrievedMessage = YourProtobufMessage.parseFrom(retrievedData); System.out.println(retrievedMessage); } catch (InvalidProtocolBufferException e) { e.printStackTrace(); } // 关闭Redis连接 jedis.close(); } } ``` 在上面的示例代码中,你需要替换`YourProtobufMessage`为你实际使用的Protobuf消息类型。你还需要根据你的Redis配置修改Redis连接的相关参数。 这是一个简单的例子,你可以根据自己的需求进行扩展和修改。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值