<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;