天天看點

《深入實踐Spring Boot》一2.2 使用Redis

本節書摘來自華章出版社《深入實踐spring boot》一書中的第2章,第2.2節,作者陳韶健,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

關系型資料庫在性能上總是存在一些這樣那樣的缺陷,是以大家有時候在使用傳統關系型資料庫時,會與具有高效存取功能的緩存系統結合使用,以提高系統的通路性能。在很多流行的緩存系統中,redis是一個不錯的選擇。redis是一種可以持久存儲的緩存系統,是一個高性能的key-value資料庫,它使用鍵-值對的方式來存儲資料。

需要使用redis,可在工程的maven配置中加入spring-boot-starter-redis依賴,如代碼清單2-9所示。其中gson是用來轉換json資料格式的工具,mysql是引用了上一節的子產品,這裡使用2.1節定義的實體對象來存取資料,示範在redis中的存取操作。

代碼清單2-9 redis子產品的maven依賴配置

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 {

minutes);

}

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

public class redisconfig {

如果還沒有安裝redis伺服器,可以參照本書附錄c提供的方法安裝,然後在工程的配置檔案application.yml中配置連接配接redis伺服器等參數,如代碼清單2-12所示。其中host和port分别表示redis資料庫伺服器的ip位址和開放端口,database可以不用指定,由redis根據存儲情況自動標明(注:測試時這些配置是內建在一個配置類中實作的)。

代碼清單2-12 redis配置

spring:

現在編寫一個juint測試程式,來示範如何在redis伺服器中存取資料,如代碼清單2-13所示。測試程式建立一個部門對象并将其命名為“開發部”,建立一個角色對象并把它命名為admin,建立一個使用者對象并把它命名為user,同時設定這個使用者屬于“開發部”,并把admin這個角色配置設定給這個使用者。接着測試程式使用類名等參數生成一個key,并使用這個key清空原來的資料,然後用這個key存儲現在這個使用者的資料,最後使用這個key查詢使用者,并将查到的資訊列印出來。

代碼清單2-13 redis測試程式

要運作這個測試程式,可以在idea的run/debug conf?iguration配置中增加一個juint配置項目,子產品選擇redis,工作目錄選擇子產品所在的根目錄,類選擇這個測試程式即dbdemo.redis.test.redistest,并将配置儲存為redistest。

使用debug方式運作測試項目redistest。如果測試通過,會輸出一個使用者的使用者名、所屬部門和擁有角色等簡要資訊,如下所示:

dbdemo.redis.test.redistest - ======user====== name:user, deparment:開發部, role:admin

對于redis的使用,還可以将注解方式與調用資料庫的方法相結合,那樣就不用再編寫像上面那樣的服務類,并且使用起來更加簡單,這将在後面的章節中介紹。