看了不少文章,往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存储至少看得懂)但是谁又会在乎呢?