SpringBoot框架有一大特性:对于常用的第三方库,提供了默认的自动配置方案,使得开发者只需要很少的spring配置就能运行一个完整的JavaEE应用。
当然,对于一些特定的Bean组件,也允许用户自定义这些Bean组件的属性。也就是说,用户可以自己配置某些Bean组件的诸多属性,以满足自身使用需求。
关于SpringBoot项目整合Redis,最重要的Bean组件包括RedisTemplate和StringRedisTemplate。
RedisTemplate是SpringBoot项目访问Redis数据的核心组件,是一个工具类,可以简化访问Redis数据的代码。而StringRedisTemplate是RedisTemplate的一种特殊体现,StringRedisTemplate继承了RedisTemplate。
提供StringRedisTemplate的主要原因是:在Redis中,大多数的操作都是基于字符串的,因此在RedisTemplate的基础上再进一步提供一个工具类StringRedisTemplate,是针对字符串的,StringRedisTemplate默认采用了String序列化策略,当我们需要对Redis中的字符串进行操作时,就可以直接使用StringRedisTemplate,最大限度地减少其更通用模板的配置,尤其是在序列化上。更进一步的减少了工具类的配置。
如下代码中自定义了操作组件RedisTemplate和StringRedisTemplate的属性:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
public class RedisConfig {
//实例化一个Redis链接工厂
@Autowired
private RedisConnectionFactory redisConnectionFactory;
//自定义Redis操作组件RedisTemplate的配置
@Bean
public RedisTemplate<String,Object> redisTemplate(){
//实例化一个RedisTemplate对象
RedisTemplate<String,Object> redisTemplate=new RedisTemplate<String, Object>();
//设置redis操作组件RedisTemplate的链接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
//接下来开始自定义操作组件RedisTemplate的配置
//指定大key序列化策略为为String序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
//value序列化策略为java自带的序列化策略
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
//指定hashKey序列化策略为String序列化
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
//redisTemplate.setHashValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
//自定义Redis操作组件StringRedisTemplate的配置
@Bean
public StringRedisTemplate stringRedisTemplate(){
//这里我们采用默认配置,需要时再进行更改
StringRedisTemplate stringRedisTemplate=new StringRedisTemplate();
//设置redis操作组件StringRedisTemplate的链接工厂
stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
return stringRedisTemplate;
}
}
上述自定义操作组件RedisTemplate和StringRedisTemplate属性的代码中,主要是定义了缓存中Key与Value的序列化策略,对于StringRedisTemplate则采用了默认配置。