将对象转换为Byte数组然后通过redisTemplate存取到Redis中

为什么要把对象转为Byte数组

  • 可以跨JVM传输对象:一旦对象被转换为字节数组,就可以在不同的JVM或系统之间轻松传输。
  • 序列化:对象转换为字节数组进行序列化,这使得对象能够被持久化到存储系统中,或通过网络传输。
  • 提高效率:字节数组比对象本身占用更少的内存和处理资源。

Redis依赖和版本

        <!--redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.6.0</version>
        </dependency>

Redis配置

#Redis配置
# Redis数据库索引(默认为0)
# Redis服务器地址
# Redis服务器连接端口
# Redis服务器连接密码(默认为空)
# 链接超时时间 单位 ms(毫秒)
# 连接池最大连接数(使用负值表示没有限制) 默认 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
# 连接池中的最大空闲连接 默认 8
# 连接池中的最小空闲连接 默认 0
spring:
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    connect-timeout: 3000
    password:
    lettuce:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0

RedisTemplate配置类

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(lettuceConnectionFactory);
        //设置key序列化方式String
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置value的序列化方式json,使用JdkSerializationRedisSerializer序列化,因为项目中User默认JDK序列化所以保持一致
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

Bean对象(注意要可序列化,即实现Serializable接口)

public class User implements Serializable {

    private static final long serialVersionUID = 202406281601L;

    private String userId;
    private String userName;
    private String password;

    public User() {
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    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 Speak() {
        return "我的信息是:{" +
                "userId='" + userId + '\'' +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

 实现方法:

public String getUserByRedis() {
        User user = new User();
        user.setUserId("123456");
        user.setUserName("zhangSan");
        user.setPassword("666666");
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(bos);
            objectOutputStream.writeObject(user);
            byte[] bytes = bos.toByteArray();
            objectOutputStream.close();
            redisTemplate.opsForValue().set(GET_USER_KEY, bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            byte[] value = (byte[]) redisTemplate.opsForValue().get(GET_USER_KEY);
            ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(value));
            User currUser = (User) objectInputStream.readObject();
            objectInputStream.close();
            return JSON.toJSONString(currUser);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

上面代码中用到了JSON

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

 

posted @ 2024-06-28 17:19  请别耽误我写BUG  阅读(75)  评论(0编辑  收藏  举报