springboot2配置redis

Redis简介

Redis是一个开源的使用 ANSI C语言编写,支持网络,可基于内存也可持久化的日志型,Key-Value数据库,并提供了多种语言的 API ,相比 Memcached 它支持存储的类型相对更多 (字符,哈希,集合,有序集合,列表等),同时Redis是线程安全的。

客户端连接Redis使用的是TCP协议,直连的方式每次需要建立TCP连接,而连接池的方式是可以预先初始化好客户端连接,所以每次只需要从连接池借用即可,而借用和归还操作是本地进行的,只有少量的并发同步开销,远远小于新建TCP连接的开销。另外,直连的方式无法限制redis客户端对象的个数,在极端情况下可能造成连接泄露,而连接池的形式可以有效的保护和控制资源的使用。

Jedis和Lettuce都是连接Redis Server的客户端程序,Jedis在实现上直连Redis Server,多线程环境下非线程安全,除非使用连接池,为每个Jedis实例增加物理连接。Lettuce基于Netty的连接实例(StatefulRedisConnection),可以在多个线程并发访问,并且线程安全,满足多线程环境下的并发访问,同时它是可以伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。

集成环境

spingboot的版本为2.x版本,本案例使用的是2.1.7版本。

在springboot1.5.x版本的默认Redis客户端是Jedis实现的,Springboot2.x版本中默认客户端是lettuce实现。

Lettuce方式

1、在pom.xml中配置spring-boot-starter-data-redis的依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

2、在application.properties文件中配置如下内容


#配置redis
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    # 如果使用的jedis 则将lettuce改成jedis即可
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0

只要配置以上2点就可以了,其他的配置springboot都已经给我们配置好了。以下是springboot自动配置的源码,可以参考:


@Configuration
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
    public RedisAutoConfiguration() {
    }
    @Bean
    @ConditionalOnMissingBean(
        name = {"redisTemplate"}
    )
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        RedisTemplate<Object, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
    @Bean
    @ConditionalOnMissingBean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
}

>StringRedisTemplate是RedisTemplate的子类,StringRedisTemplate中的问和value都是字符串,采用的序列化方案是StringRedisSerializer,而RedisTemplate则可以用来操作对象,RedisTemplate采用的序列化方案是JdkSerializationRedisSerializer。无论是StringRedisTemplate还是RedisTemplate,操作Redis的方法都是一致的.StringRedisTemplate和RedisTemplate都是通过opsForValue、opsForZSet或者opsForSet等方法首先获取一个操作对象,再使用该操作对象完成数据的读写。

测试

编写单元测试进行验证,单元测试中使用到了一个User对象,就不在这里展示了。 具体单元测试代码如下:


@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTemplateTest {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void redisTest(){
        //redis存储数据
        String key = "token";
        stringRedisTemplate.opsForValue().set(key,"123456");
        //获取数据
        String value = stringRedisTemplate.opsForValue().get(key);
        System.out.println("获取缓存中key为"+key+"的值为:"+value);

        User user = new User();
        user.setUserName("Tom");
        user.setUserId("123");
        user.setEmail("Tom@126.com");
        user.setPhone("13800138000");
        redisTemplate.opsForValue().set("user",user);

        User u = (User) redisTemplate.opsForValue().get("user");
        System.out.println("获取的用户为:"+u.getUserName());
    }
}

Jedis方式

Jedis的配置可以很轻松的在Lettuce上修改。

1、修改pom.xml


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <!-- 这里需要单独排除默认包的引入 -->
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 需要额外增加jedis的配置 -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

2、修改application.yum中的redis配置,把lettuce修改成jedis即可。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦