springboot中如何使用RedisTemplate存储实体对象

RedisTemplate是spring封装的操作redis的接口,使用起来很方便,但也有很多坑,比如存储javabean类。

网上找了很多资料,很多都语焉不详,几乎毫无作用。

redis存储对象需要对实体类进行序列化,也就是写成javabean,而不是pojo类。

其次,在存储对象的操作中,需要对实体类进行流化读写操作,就像文件的字节流的序列化操作一样,因为序列化本身就是流的转化的过程。而数据的持久化实际上也就是把数据写入磁盘文件的操作。大家把持久化和文件的读写操作联系起来就容易理解了。

但是,很多资料都没有提到具体对象的流化操作,所以按照那些资料操作往往会报错。大家需要注意这一点。

查了一些资料,RedisTemplate存储对象需要用到两个类:ObjectOutputStream和ByteArrayOutputStream。

“ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。”

“ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据。在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去。”

这两个类大概就是上面两段所说的这么一回事。

我们采用HashMap的数据结构来存储,但像网上直接使用redisTemplate.boundHashOps(String).put(String,Object);是不行的。

至于那些重写序列化的方式,我一时也没看明白,感觉太麻烦,这里就给大家演示最简单的方式好了:

实体类:

/*务必记得继承序列化的接口*/
public class SongRedis implements Serializable{
    private final static long serialVersionUID = 1L;
    private String id;
    private String songname;
    private String author;
    private String path;

    private final String OBJECT_KEY = "SONGS";

    public String getSongname() {
        return songname;
    }

    public void setSongname(String songname) {
        this.songname = songname;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getKey() {
        return getId();
    }

    public String getObjectKey() {
        return OBJECT_KEY;
    }
}

实现类的实现方法:

两步完成Redis存储对象的操作,至于Redis配置的方案,这里就不给出来了,网上基本都有。这篇博客不是redis教程,有时间的可能会具体把我学习redis的过程整理成教程,但不是现在。

想更详细了解的,可以到这篇博文去看看:

经验分享 程序员 微信小程序 职场和发展