redis的java操作(二):redis存取java对象,java对象的序列化

本文介绍如何使用Java序列化技术将对象存储至Redis,并提供完整的示例代码,包括依赖配置、序列化与反序列化方法及操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在大量的应用场景中,我们需要使用redis存取java对象。redis存取对象需要将对象序列化。

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。之后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。例如此处,我们将java对象转化为bytes数组的过程称为序列化,将bytes转化为java对象的过程称为反序列化。

首先是pom依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

1.我们假设要存储User对象,User类代码如下,注意,一个java类对象想要序列化,必须实现Serializable接口。

public class User implements Serializable {

    private String id;
    private String username;
    private String password;
    private String nickname;
    private String gender;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", nickname='" + nickname + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
}

2.将该对象序列化和反序列化的类,代码如下:

public class SerializeUtil {

    // 序列化
    public static byte[] serialize(Object object) {

        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        byte[] bytes = null;
        try {
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(object);
            bytes = baos.toByteArray();
        } catch (Exception e) {
            System.err.println("序列化失败" + e.getMessage());
        }
        return bytes;
    }

    // 反序列化
    public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {

        ByteArrayInputStream bais = null;
        ObjectInputStream ois = null;
        try {
            bais = new ByteArrayInputStream(bytes);
            ois = new ObjectInputStream(bais);
        } catch (Exception e) {
            System.err.println("反序列化失败" + e.getMessage());
        }
        return ois.readObject();
    }
}

3.redis操作java(POJO)对象的代码如下:

public class RedisObjectDemo {

    public static void main(String args[]){

        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(8);
        config.setMaxTotal(8);
        config.setMaxWaitMillis(1000);
        JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000, null, 0);
        Jedis jedis = jedisPool.getResource();
        User user = new User();
        user.setId("1");
        user.setGender("男");
        user.setNickname("cherish");
        user.setPassword("123456");
        user.setUsername("admin");
        jedis.set("user".getBytes(), SerializeUtil.serialize(user));
        System.out.println("--------------------------------------------------------------------");
        try {
            User userResult = (User) SerializeUtil.deserialize(jedis.get("user".getBytes()));
            System.out.println(userResult.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

关于java如何连接和操作redis,笔者在上篇博客中已经说明,连接地址:https://blog.youkuaiyun.com/m0_38075425/article/details/81179510

4.运行测试,如下图:

redis存取对象成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级战斗王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值