天天看點

深入實踐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;