4 SpringBoot整合Redis


SpringBoot整合Redis

  • SpringBoot操作数据: spring-data jpa jdbc mongodb redis
  • SpringData也是和SpringBoot齐名的项目!
  • 说明︰在 SpringBoot 2.x 之后,原来使用的 jedis 被替换为了 lettuce?
    • jedis : 采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用 jedis pool 连接池! BIO
    • lettuce: 采用 netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!
      NIO

源码:

  • SpringBoot 所有的配置类,都有一个自动配置类 Redis AutoConfiguration
  • 自动配置类都会绑定一个 properties 配置文件 RedisProperties
    @Bean
    @ConditionalOnMissingBean(  //我们可以自定义 Template 替换掉 RedisTemplate
        name = {"redisTemplate"}
    )
    @ConditionalOnSingleCandidate(RedisConnectionFactory.class)
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

    //默认的 RedisTemp1ate 没有过多的设置,redis 对象都是需要序列化!
    //两个泛型都是 object,object的类型,我们后使用需要强制转换<string,object>

        RedisTemplate<Object, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnSingleCandidate(RedisConnectionFactory.class)
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {   
    //由于 string 是redis中最常使用的类型,所以说单独提出来了一个bean !

        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

整合:

  1. 导入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 配置( application.properties )
# 配置redis
spring.redis.port=6379
# 本地 ip 222.20.79.105
spring.redis.host=222.20.79.105
  1. 注入,启动
package com.allen.redis02springboot;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

@SpringBootTest
class Redis02SpringbootApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        // opsForValue() 操作字符串方法
        redisTemplate.opsForValue().set("k1","v1");
    }
}

文章作者: Hailong Gao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Hailong Gao !
评论
  目录