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

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

猜你喜欢

转载自blog.csdn.net/u014449560/article/details/82807880
今日推荐