【string实战玩家信息缓存】1.fastjson实现string和java bean互转 2.fastjson,jackson,gson

Role.java

package org.example.testjedis;

public class Role {
    private long rid;
    private String name;
    private int age;

    private Data data;

    public Role(long rid, String name, int age, Data data) {
        this.rid = rid;
        this.name = name;
        this.age = age;
        this.data = data;
    }

    @Override
    public String toString() {
        return "Role{" +
                "rid=" + rid +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", data=" + data +
                '}';
    }

    public long getRid() {
        return rid;
    }

    public void setRid(long rid) {
        this.rid = rid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Data getData() {
        return data;
    }

    public void setData(Data data) {
        this.data = data;
    }
}

Data.java

package org.example.testjedis;

public class Data {
    private long rid1;
    private String name1;
    private int age1;

    public Data(long rid1, String name1, int age1) {
        this.rid1 = rid1;
        this.name1 = name1;
        this.age1 = age1;
    }

    @Override
    public String toString() {
        return "Data{" +
                "rid1=" + rid1 +
                ", name1='" + name1 + '\'' +
                ", age1=" + age1 +
                '}';
    }

    public long getRid1() {
        return rid1;
    }

    public void setRid1(long rid1) {
        this.rid1 = rid1;
    }

    public String getName1() {
        return name1;
    }

    public void setName1(String name1) {
        this.name1 = name1;
    }

    public int getAge1() {
        return age1;
    }

    public void setAge1(int age1) {
        this.age1 = age1;
    }
}

RoleService.java

package org.example.testjedis;

import com.alibaba.fastjson.JSON;
import redis.clients.jedis.Jedis;

public class RoleService {
    public static void addUser(Role role) {
        try (
                Jedis jedis = new Jedis();
        ) {
            // 对象转string
            String jo = JSON.toJSONString(role);
            jedis.set("role_" + role.getRid(), jo);
        }
    }

    public static Role getRole(long rid) {
        try (
                Jedis jedis = new Jedis();
        ) {
            String s = jedis.get("role_" + rid);
            // string转对象
            Role role = JSON.parseObject(s, Role.class);
            return role;
        }
    }
}

Main.java

package org.example.testjedis;

public class Main {
    public static void main(String[] args) {
        // 添加一个玩家信息
        RoleService.addUser(new Role(1, "jianan", 28, new Data(222, "xx", 123)));
        // 获取一个玩家信息
        Role role = RoleService.getRole(1);

        System.out.println(role);
    }
}

/*
Role{rid=1, name='jianan', age=28, data=Data{rid1=222, name1='xx', age1=123}}
 */

===============

    <!--fastjson-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.83</version>
    </dependency>

    <!--gson-->
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.2.4</version>
    </dependency>

    <!--jackson-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.10.1</version>
    </dependency>

package com.example.testsb.testJson;

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import java.util.List;
import java.util.Map;

public class Main {

    public static void main(String[] args) throws JsonProcessingException {
        List<Student> list = Lists.newArrayList();
        for (int i = 0; i < 10; i++) {
            Info info = new Info();
            info.setId(i);
            info.setMap(Map.of(i + "", i));

            Student student = new Student();
            student.setName("Name_" + i);
            student.setAge(i);
            student.setList(Lists.newArrayList(info));

            list.add(student);
        }

        int N = 1000000;

        // fastjson
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < N; i++) {
            String s2 = JSON.toJSONString(list);
            List<Student> student2 = JSON.parseArray(s2, Student.class);

            //  ystem.out.println(s2);
            //  System.out.println(student2);
        }
        System.out.println(System.currentTimeMillis() - startTime);

        // jackson
        ObjectMapper mapper = new ObjectMapper();
        startTime = System.currentTimeMillis();
        for (int i = 0; i < N; i++) {

            String s3 = mapper.writeValueAsString(list);
            List<Student> students3 = mapper.readValue(s3, new TypeReference<>() {});
            //  System.out.println(s3);
            //  System.out.println(students3);

        }
        System.out.println(System.currentTimeMillis() - startTime);

        // gson
        Gson gson = new Gson();
        startTime = System.currentTimeMillis();

        for (int i = 0; i < N; i++) {
            String s = gson.toJson(list);

            List<Student> list1 = gson.fromJson(s, new TypeToken<List<Student>>() {}.getType());
            //            System.out.println(s);
            //            System.out.println(list1);
        }
        System.out.println(System.currentTimeMillis() - startTime);
    }
}
/*
7547
9537
15807
 */

总结:兼顾性能和稳定性,都是推荐jackson作为json的序列和反序列化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值