<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<string, string>
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<user> 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<user> getlist(string key)
{
list<user> ts = null;
string listjson =
if(!stringutils.isempty(listjson))
ts = gson.fromjson(listjson, new
typetoken<list<user>>(){}.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<string, string>
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;