介绍
介绍
福哥今天带着同学们给我们的TFSpring框架增加RedisTemplate的功能。和JdbcTemplate一样,福哥只是简单的把它配置起来而已。
RedisTemplate是Java语言操作Redis数据库的主流工具对象,它借助Jedis驱动实现了操作Redis数据库的功能。
RedisTemplate包括很多种数据类型的操作功能,而福哥只使用了它的字符串(String)类型和对象(Object)类型两种,其他类型我们以后再逐步补充上来吧。
配置数据源
配置Redis数据源
############################################################################## # redis ############################################################################## nosql.redis.host=192.168.1.168 nosql.redis.port=6379 nosql.redis.pass=tongfu.net
添加依赖项
增加Redis依赖项
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.1.7.RELEASE</version> </dependency>
增加Jedis驱动
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.3.0</version> </dependency>
ConfigRedisBuilder
createJedisConnectionFactory
public JedisConnectionFactory createJedisConnectionFactory(String hostName, Integer port, String password){
RedisStandaloneConfiguration jc = new RedisStandaloneConfiguration();
jc.setHostName(hostName);
jc.setPort(port);
if(password != null && !password.equals("")){
jc.setPassword(password);
}
JedisConnectionFactory jf = new JedisConnectionFactory(jc);
return jf;
}createRedisStringString
public RedisTemplate<String, String> createRedisStringString(JedisConnectionFactory factory){
RedisTemplate<String, String> rt = new RedisTemplate<String, String>();
rt.setConnectionFactory(factory);
StringRedisSerializer ss = new StringRedisSerializer();
rt.setKeySerializer(ss);
rt.setValueSerializer(ss);
rt.afterPropertiesSet();
return rt;
}createRedisStringObject
public RedisTemplate<String, Object> createRedisStringObject(JedisConnectionFactory factory){
RedisTemplate<String, Object> rt = new RedisTemplate<String, Object>();
rt.setConnectionFactory(factory);
Jackson2JsonRedisSerializer<Object> jjs = new Jackson2JsonRedisSerializer<Object>(Object.class);
StringRedisSerializer ss = new StringRedisSerializer();
rt.setKeySerializer(ss);
rt.setValueSerializer(jjs);
rt.setHashKeySerializer(ss);
rt.setHashValueSerializer(jjs);
rt.setEnableDefaultSerializer(true);
rt.setDefaultSerializer(jjs);
return rt;
}ConfigRedis
定义
@Configuration
public class ConfigRedis {redisDS
@Bean(name = "redisDS")
@Qualifier("redisDS")
public JedisConnectionFactory redisDS(
@Value("${nosql.redis.host}") String hostName,
@Value("${nosql.redis.port}") int port,
@Value("${nosql.redis.pass}") String password
) {
ConfigRedisBuilder redisBuilder = new ConfigRedisBuilder();
return redisBuilder.createJedisConnectionFactory(hostName, port, password);
}redisRS
@Bean(name = "redisRS")
@Qualifier("redisRS")
public RedisTemplate<String, String> redisRS(
@Qualifier("redisDS") JedisConnectionFactory factory
) {
ConfigRedisBuilder redisBuilder = new ConfigRedisBuilder();
return redisBuilder.createRedisStringString(factory);
}redisRO
@Bean(name = "redisRO")
@Qualifier("redisRO")
public RedisTemplate<String, Object> redisRO(
@Qualifier("redisDS") JedisConnectionFactory factory
) {
ConfigRedisBuilder redisBuilder = new ConfigRedisBuilder();
return redisBuilder.createRedisStringObject(factory);
}ConfigDataSourceObject
定义
@Configuration
public class ConfigDataSourceObject {redisRS
@Autowired
@Qualifier("redisRS")
private RedisTemplate<String, String> redisRS;redisRO
@Autowired
@Qualifier("redisRO")
private RedisTemplate<String, Object> redisRO;getRedisString
public RedisTemplate<String, String> getRedisString(){
return redisRS;
}getRedisObject
public RedisTemplate<String, Object> getRedisObject(){
return redisRO;
}讲解
ConfigRedisBuilder
createJedisConnectionFactory
建立Jedis连接工厂,用来创建RedisTemplate实例
createRedisStringString
使用上面的Jedis连接工厂创建类型为<String, String>的RedisTemplate实例,实例用来处理纯字符串类型的数据
createRedisStringObject
使用上面的Jedis连接工厂创建类型为<String, Object>的RedisTemplate实例,实例用来处理结构对象数据
ConfigRedis
定义
给ConfigRedis增加@Configuration注解,它需要第一时间运行
redisDS
这里对ConfigRedisBuilder的createJedisConnectionFactory进行了调用,实现一样的功能
redisRS
这里对ConfigRedisBuilder的createRedisStringString进行了调用,实现一样的功能
redisRO
这里对ConfigRedisBuilder的createRedisStringObject进行了调用,实现一样的功能
ConfigDataSourceObject
定义
给ConfigDataSourceObject增加@Configuration注解,它需要第一时间运行
redisRS
注入ConfigRedis的redisRS方法的结果到redisRS属性上面。
redisRO
注入ConfigRedis的redisRO方法的结果到redisRO属性上面。
getRedisString
返回redisRS这个RedisTemplate实例,这个是前面一步一步的注入“自动载入”进来的。
getRedisObject
返回redisRO这个RedisTemplate实例,这个是前面一步一步的注入“自动载入”进来的。
使用
注入
上节课给大家讲JdbcTemplate的时候忘记给大家说了,经过前面的准备工作之后,只需要在控制器对象里用@Autowired注解将配置对象ConfigDataSourceObject引入进来就可以了。
而且,因为福哥将JdbcTemplate和RedisTemplate都封装到ConfigDataSourceObject对象里面了,所以,在控制器对象里面只需要引入一个实例就可以了。
@Autowired ConfigDataSourceObject dso;
代码
String now = TFDatetime.toString(TFDatetime.date());
map.put("nowDirect", now);
dso.getRedisString().opsForValue().set("now", now);
now = dso.getRedisString().opsForValue().get("now").toString();
map.put("nowInRedis", now);效果

总结
福哥今天带着童鞋们给TFSpring框架配置了RedisTemplate功能,我们在控制器里面注入ConfigDataSourceObjec对象的实例,然后通过ConfigDataSourceObject
的getRedisString方法或者getRedisObject方法就可以操作Redis数据库了。