SpringBoot-整合Redis

1 - Spring Boot整合Redis

SpringBoot 操作数据:spring-data jpa jdbc mongodb redis

SpringData 也是和 SpringBoot齐名的项目

说明:在 /SpringBoot 2.0以后,原来使用的jedis被替换成为了 lettuce

jedis:采用的直连,多个线程操作不安全,若要避免,则要使用jedis pool连接池,更像Bio模式

lettuce:采用netty,可以在多个线程中共享,不存在线程不安全的情况,可以减少线程数量,更像Nio模式

1、源码分析

// RedisAutoConfiguration.java
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class) // RedisAutoConfiguration配置类绑定着RedisProperties类
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
// RedisProperties.java
@ConfigurationProperties(prefix = "spring.redis") // RedisProperties类又绑定着全局配置文件
public class RedisProperties {

RedisAutoConfiguration.java 自动配置类绑定着RedisProperties.java(封装配置文件中相关属性类,这个类又绑定着全局配置文件,当我们在全局配置中添加一些属性时,

就是改变了这个配置文件类的属性),给容器添加Redis组件的时候,从这个RedisProperties类获取相关的属性,生成Redis组件,添加到SrpingBoot容器中。

@Bean
    @ConditionalOnMissingBean(name = "redisTemplate") // 这个注解的使用告诉我们,"redisTemplate" 不存在时下面方法才生效,此时我们可以自定义一个redisTemplate替换默认的
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        /*
        默认的RedisTemplate没有过多的配置,Redis对象都是需要序列化
        两个泛型都是Object类型的,后面我们使用需要强转<String,String>
        */
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

    @Bean
    @ConditionalOnMissingBean // 由于 String 是 Redis 中最常用的类型,所以说单独提出来了一个bean!
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

2、配置步骤

1.导入maven依赖(也可以构建项目时勾选对应的内容)

<!--操作redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.在全局配置文件中配置Redis

# 配置Redis
spring:
  redis:
    host: localhost
    port: '6379'

3.测试

@SpringBootTest
class Day07ApplicationTests {
    @Autowired
    private RedisTemplate<Object,Object> redisTemplate;
    @Test
    void contextLoads() {
        /*opsForValue操作string
        opsForList list
        opsForHyperLogLog HyperLogLog
        除了基本的操作,常用的方法都可以直接通过RedisTemplate操作,比如事务
        清空数据库通过connection操作
        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
        connection.flushDb();*/
        redisTemplate.opsForValue().set("myKey","hello world");
        Object myKey = redisTemplate.opsForValue().get("myKey");
        System.out.println(myKey);
    }
}

4、序列化配置,默认为JdkSerializationRedisSerializer。自定义序列化配置网上查询。

@SuppressWarnings("rawtypes") private @Nullable RedisSerializer keySerializer = null;
@SuppressWarnings("rawtypes") private @Nullable RedisSerializer valueSerializer = null;
@SuppressWarnings("rawtypes") private @Nullable RedisSerializer hashKeySerializer = null;
@SuppressWarnings("rawtypes") private @Nullable RedisSerializer hashValueSerializer = null;

 

posted @ 2020-10-22 18:29  赖正华  阅读(151)  评论(0编辑  收藏  举报