天天看点

深入实践Spring Boot2.2.2 创建Redis服务类

<b>2.2.2 创建redis服务类</b>

redis提供了下列几种数据类型可供存取:

string;

hash;

list;

set及zset。

在实例中,将使用string即字符串的类型来演示数据的存取操作。对于redis,spring boot没有提供像jpa那样相应的资源库接口,所以只能仿照上一节中repository的定义编写一个实体user的服务类,如代码清单2-10所示。这个服务类可以存取对象user以及由user组成的列表list,同时还提供了一个删除的方法。所有这些方法都是使用redistemplate来实现的。

代码清单2-10 用户实体的redis服务类

@repository

public class

userredis {

    @autowired

    private redistemplate&lt;string, string&gt;

redistemplate;

    public void add(string key, long time,user

user) {

        gson gson = new gson();

        redistemplate.opsforvalue().set(key,

gson.tojson(user), time, timeunit.

minutes);

    }

    public void add(string key, long time,

list&lt;user&gt; users) {

gson.tojson(users), time, timeunit.

    public user get(string key) {

        user user = null;

        string userjson =

redistemplate.opsforvalue().get(key);

        if(!stringutils.isempty(userjson))

            user = gson.fromjson(userjson,

user.class);

        return user;

    public list&lt;user&gt; getlist(string key)

{

        list&lt;user&gt; ts = null;

        string listjson =

        if(!stringutils.isempty(listjson))

            ts = gson.fromjson(listjson, new

typetoken&lt;list&lt;user&gt;&gt;(){}.gettype());

        return ts;

    public void delete(string key){

redistemplate.opsforvalue().getoperations().delete(key);

}

redis没有表结构的概念,所以要实现mysql数据库中表的数据(即普通java对象映射的实体数据)在redis中存取,必须做一些转换,使用json格式的文本作为redis与java普通对象互相交换数据的存储格式。这里使用gson工具将类对象转换为json格式的文本进行存储,要取出数据时,再将json文本数据转化为java对象。

因为redis使用了key-value的方式存储数据,所以存入时要生成一个唯一的key,而要查询或者删除数据时,就可以使用这个唯一的key进行相应的操作。

保存在redis数据库中的数据默认是永久存储的,可以指定一个时限来确定数据的生命周期,超过指定时限的数据将被redis自动清除。在代码清单2-10中我们以分钟为单位设定了数据的存储期限。

另外,为了能正确调用redistemplate,必须对其进行一些初始化工作,即主要对它存取的字符串进行一个json格式的系列化初始配置,如代码清单2-11所示。

代码清单2-11 redistemplate初始化

@configuration

redisconfig {

    @bean

    public redistemplate&lt;string, string&gt;

redistemplate(

            redisconnectionfactory factory) {

        stringredistemplate template = new

stringredistemplate(factory);

        jackson2jsonredisserializer

jackson2jsonredisserializer = new jackson2jsonredisserializer(object.class);

        objectmapper om = new objectmapper();

        om.setvisibility(propertyaccessor.all,

jsonautodetect.visibility.any);

        om.enabledefaulttyping(objectmapper.defaulttyping.non_final);

jackson2jsonredisserializer.setobjectmapper(om);

template.setvalueserializer(jackson2jsonredisserializer);

        template.afterpropertiesset();

        return template;