将对象转换为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>
RedisTemplate 是 Spring Data Redis 提供的一个用于操作 Redis 数据库的模板类。它封装了 Redis 的常用操作,使得在 Java 代码可以方便地进行 Redis 数据的存取。 使用 RedisTemplate 存取对象的步骤如下: 1. 配置 RedisTemplate:在 Spring 配置文件配置 Redis 连接信息,包括 Redis 服务器地址、端口号、密码等。 2. 注入 RedisTemplate:在需要使用 RedisTemplate 的类,使用 `@Autowired` 注解注入 RedisTemplate 对象。 3. 存储对象:通过 RedisTemplate 的 `opsForValue()` 方法可以获取 ValueOperations 对象,然后使用 `set(key, value)` 方法将对象存储到 Redis 。其,key 是存储对象的键,value 是要存储的对象。 ```java @Autowired private RedisTemplate<String, Object> redisTemplate; public void saveObject(String key, Object value) { redisTemplate.opsForValue().set(key, value); } ``` 4. 获取对象:通过 RedisTemplate 的 `opsForValue()` 方法可以获取 ValueOperations 对象,然后使用 `get(key)` 方法从 Redis 获取存储的对象。 ```java public Object getObject(String key) { return redisTemplate.opsForValue().get(key); } ``` 需要注意的是,存储到 Redis 对象需要实现 Serializable 接口,以便进行序列化和反序列化操作。 以上就是使用 RedisTemplate 存取对象的基本步骤。通过 RedisTemplate,我们可以方便地将 Java 对象存储到 Redis ,并且可以按照需要进行读取和更新操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值