redis中缓存数据的格式

  1. 使用json格式

    存储:java对象----》json字符串

    获取:json字符串-----》java对象

    添加依赖

<dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>fastjson</artifactId>

            <version>1.2.47</version>

        </dependency>

建立Course实体类

package com.wangpx.pojo;

import java.io.Serializable;
import java.util.Objects;

/**
 * com.wangpx.pojo
 *
 * @author wangpx
 * @date 2019-12-09 20:43
 */

public class Coures implements Serializable {
    private Integer cid;
    private String cname;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Coures coures = (Coures) o;
        return Objects.equals(cid, coures.cid) &&
                Objects.equals(cname, coures.cname);
    }

    @Override
    public int hashCode() {
        return Objects.hash(cid, cname);
    }

    @Override
    public String
    toString() {
        return "Coures{" +
                "cid=" + cid +
                ", cname='" + cname + '\'' +
                '}';
    }

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public Coures() {
    }

    public Coures(Integer cid, String cname) {
        this.cid = cid;
        this.cname = cname;
    }
}

建立User 实体类

package com.wangpx.pojo;

import java.io.Serializable;
import java.util.List;
import java.util.Objects;

/**
 * com.wangpx.pojo
 *
 * @author wangpx
 * @date 2019-12-09 20:42
 */

public class User implements Serializable {
    private  Integer uid;
    private String uname;
    private String fav;
    private Integer age;
    private List<Coures> coures;


    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", fav='" + fav + '\'' +
                ", age=" + age +
                ", coures=" + coures +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(uid, user.uid) &&
                Objects.equals(uname, user.uname) &&
                Objects.equals(fav, user.fav) &&
                Objects.equals(age, user.age) &&
                Objects.equals(coures, user.coures);
    }

    @Override
    public int hashCode() {
        return Objects.hash(uid, uname, fav, age, coures);
    }

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getFav() {
        return fav;
    }

    public void setFav(String fav) {
        this.fav = fav;
    }

    public Integer getAge() {
        return age;
    }

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

    public List<Coures> getCoures() {
        return coures;
    }

    public void setCoures(List<Coures> coures) {
        this.coures = coures;
    }

    public User() {
    }

    public User(Integer uid, String uname, String fav, Integer age, List<Coures> coures) {
        this.uid = uid;
        this.uname = uname;
        this.fav = fav;
        this.age = age;
        this.coures = coures;
    }
}

进行对象的保存和获取

package com.wangpx.fastJson;

import com.alibaba.fastjson.JSON;
import com.wangpx.pojo.Coures;
import com.wangpx.pojo.User;
import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.ArrayList;

/**
 * com.wangpx.fastJson
 *
 * @author wangpx
 * @date 2019-12-09 20:46
 */

public class TestFastJson {
    /**
     * java对象转换为json字符串
     */
    @Test
    public void objectToJson(){
        //链接
        Jedis jedis = new Jedis("192.168.100.136",6379);
        //密码:
        jedis.auth("961220");
        //选择数据库
        jedis.select(4);
        //创建User对象
        User user = new User();
        user.setUid(1);
        user.setUname("张无忌");
        user.setAge(20);
        user.setFav("泡妞,打架");
        Coures coures = new Coures(1,"九阴真经");
        ArrayList<Coures> list = new ArrayList<>();
        list.add(coures);
        user.setCoures(list);
        //将User对象转换为json字符串
        String s = JSON.toJSONString(user);
        System.out.println("jsonStr="+s);
        //将字符串保存到缓存库
        jedis.set("User",s);
        //获得保存的对象
        String user1 = jedis.get("User");
        System.out.println();
        //将字符串解析为User对象
        User user2 = JSON.parseObject(user1, User.class);
        System.out.println(user2.getUid()+""+user2.getAge()+user2.getCoures()+user2.getUname()+user2.getFav());


    }



}

  1. 使用字节数组存储数据:

    存储:

    ①实体类实现序列化接口。
    ②将key转换为byte[]
    ③将对象转为为byte[]
    

    获取:

    将byte[]转换为对应的java对象
    

BinaryUtils工具类

对象的序列化:将javabean对象转为二进制进行传输或者存储
对象的反序列化:将二进制还原为原始的javabean对象

package com.wangpx.util;

import java.io.*;

/**
 * com.wangpx.util
 *
 * @author wangpx
 * @date 2019-12-09 21:03
 */

public class BinaryUtil implements Serializable {

    /**
     * java对象 转换为byte[]
     * @param obj
     * @return
     */
    public static byte[] objToByte(Object obj){
        ByteArrayOutputStream out=null;

        ObjectOutputStream oos=null;
        try {

            //创建ByteArrayOutputStream对象

            out=new ByteArrayOutputStream();

            //创建对象输出流

            oos = new ObjectOutputStream(out);


            //使用输出流,将对象进行输出,输出到

            oos.writeObject(obj);


            byte[] buf = out.toByteArray();



            return buf;


        } catch (Exception e) {
            e.printStackTrace();

        }finally {

            try{

                if(oos!=null){

                    oos.flush();

                    oos.close();
                }

                if(out!=null){

                    out.close();
                }

            } catch (Exception e) {
                e.printStackTrace();

            }

        }


        return null;
    }

    /**
     *  byte数组转化为javabean对象
     * @param buf
     * @param clz
     * @param <T>
     * @return
     */
    public static <T> T byteToObj(byte[] buf,Class<T> clz){

        ByteArrayInputStream bais=null;

        ObjectInputStream ois=null;

        try{

            bais=new ByteArrayInputStream(buf);


            ois=new ObjectInputStream(bais);


            T t = (T) ois.readObject();


            return t;

        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            try{
                if(ois!=null){
                    ois.close();
                }
                if(bais!=null){
                    bais.close();
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
        return null;

    }

}

使用BinaryUtils工具类进行对对象的保存和获取

package com.wangpx.testByte;

import com.wangpx.pojo.Coures;
import com.wangpx.pojo.User;
import com.wangpx.util.BinaryUtil;
import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.ArrayList;

/**
 * com.wangpx.testByte
 *
 * @author wangpx
 * @date 2019-12-09 21:12
 */

public class TestToByte {
    @Test
    public void testToByte(){
        //链接
        Jedis jedis = new Jedis("192.168.100.136",6379);
        //密码:
        jedis.auth("961220");
        //选择数据库
        jedis.select(5);
        //创建User对象
        User user = new User();
        user.setUid(1);
        user.setUname("张无忌");
        user.setAge(20);
        user.setFav("泡妞,打架");
        Coures coures = new Coures(1,"九阴真经");
        ArrayList<Coures> list = new ArrayList<>();
        list.add(coures);
        user.setCoures(list);
        //将User对象转换为byte[]数组
        byte[] value = BinaryUtil.objToByte(user);
        byte[] key = BinaryUtil.objToByte(user.getUid());
        //存储
        //jedis.set(key,value);
        byte[] bytes = jedis.get(key);
        System.out.println(bytes);
        //进行反序列化
        User user1 = BinaryUtil.byteToObj(bytes, User.class);
        System.out.println(user1);

    }
}

发布了18 篇原创文章 · 获赞 6 · 访问量 238

猜你喜欢

转载自blog.csdn.net/penerx/article/details/103465843