使用Redis存储Java对象?使用SpringBoot你可能不用那么麻烦

1 篇文章 0 订阅
1 篇文章 0 订阅

看了不少文章,往Redis里存对象基本上不外乎两种:将对象转化成Json,然后取出来之后在反序列化,或者将对象转成byte[]。而如果你使用SpringBoot的话,使用Spring-data-redis可能会更加简便。

首先我们使用maven搭建Spring Boot项目,引入Spring data redis的依赖。

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
 </dependency>

然后在application.yml(我喜欢使用这种配置)里配置redis

spring:
  redis:
    host: localhost

写一个测试类,注意一定要实现序列化接口

import java.io.Serializable;

public class Test implements Serializable {
    private String id;
    private String name;
    private int age;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    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;
    }
}

然后为了简便测试,写一个Controller类。如下:

import com.cxy.animecl.main.pojo.test.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping(value = "/redis")
@RestController
public class RedisController {
    @Autowired
    private RedisTemplate<Object,Object> redisTemplate;
    @RequestMapping(value = "/set")
    public String set(){
        Test test = new Test();
        test.setId("1");
        test.setAge(20);
        test.setName("张三");
        redisTemplate.opsForValue().set("1", test);
        return "OK";
    }

    @RequestMapping(value = "/get")
    public Test get(){
        return (Test)redisTemplate.opsForValue().get("1");
    }
}

这里我们直接Autowire注入Spring给我们提供的RedisTemplate类,(其实还提供了另外一种StringRedisTemplate,这个专门用来操作字符串)注意泛型都写Object,否则会报错。

然后我们用浏览器访问地址进行操作,经过测试没有问题,如图:

怎么样,是不是很简单?通过Spring封装的Redis可以很简单的将Java对象存入Redis中,而取出来之后也只需要强转一下就OK。那么我们看一下redis里到底存的是什么?

127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05t\x00\x011"
127.0.0.1:6379> get "\xac\xed\x00\x05t\x00\x011"
"\xac\xed\x00\x05sr\x00#com.cxy.animecl.main.pojo.test.Test\xb6\xe2\xd8.\x93\xc3R\x8d\x02\x00\x03I\x00\x03ageL\x00\x02idt\x00\x12Ljava/lang/String;L\x00\x04nameq\x00~\x00\x01xp\x00\x00\x00\x14t\x00\x011t\x00\x06\xe5\xbc\xa0\xe4\xb8\x89"
127.0.0.1:6379>

好吧,如果有兴趣,自己去深究其中的原理吧,反正我是看不太懂了。

由此可见,使用这种方式,如果你想通过redis客户端去维护和查看数据,基本是不可能。(使用Json存储至少看得懂)但是谁又会在乎呢?

Spring Boot提供了对Redis的支持,可以方便地将Java对象存储Redis中。 要存储Java对象Redis中,首先需要配置Redis的连接信息,可以在application.properties文件中进行配置,例如: ``` # Redis连接信息 spring.redis.host=127.0.0.1 spring.redis.port=6379 ``` 接下来,需要定义一个RedisTemplate的bean,用于操作Redis。可以通过在配置类中添加@Bean注解来定义RedisTemplate,例如: ```java @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); return redisTemplate; } } ``` 这样,就创建了一个名为redisTemplate的RedisTemplate对象。 要存储Java对象Redis中,可以使用RedisTemplate的opsForValue()方法来获取一个ValueOperations对象,然后可以使用对象的set方法将Java对象存储Redis中,例如: ```java @Autowired private RedisTemplate<String, Object> redisTemplate; public void saveObjectToRedis(String key, Object value) { redisTemplate.opsForValue().set(key, value); } ``` 上述方法中的key是存储对象Redis中的键名,value是要存储Java对象。 通过以上方式,就可以将Java对象存储Redis中了。需要注意的是,保Redis中的对象需要实现Serializable接口,以便在存储和读取时进行序列化和反序列化操作。 在读取Java对象时,可以使用RedisTemplate的opsForValue()方法获取ValueOperations对象,然后使用对象的get方法获取存储Redis中的Java对象。 总结来说,使用Spring Boot和Redis,可以方便地将Java对象存储Redis中,通过RedisTemplate提供的方法可以进行存储和读取操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值