做个java框架(9)——使用RedisTemplate操作Redis数据库【20210111】

发表于 2021-01-10 00:28:57
阅读 122

介绍

介绍

福哥今天带着同学们给我们的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);

效果

9515de42cc810292.jpg

总结

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