介绍
介绍
福哥今天带着同学们给我们的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数据库了。