SpringBoot2 | 第十三篇:整合 Jedis Redis

​ 要想在 Java 中连接 Redis,并进行操作,可以用 Spring Data Redis,它是由 Spring 集成的,一种是官方推荐的 Jedis支持集群,其他功能差不多一样。这篇笔记记录如何整合单机版Jedis

[TOC]

环境/版本一览:

  • 开发工具:Intellij IDEA 2018.2.2
  • springboot: 2.0.5.RELEASE
  • jdk:1.8.0_171
  • maven:3.3.9
  • jedis:2.9.0

1、pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 引入jedis依赖 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
<scope>test</scope>
</dependency>
</dependencies>

2、application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
spring:
redis:
host: localhost
password: 123456
# Redis默认情况下有16个分片,这里配置具体使用的分片,默认是0
database: 1
jedis:
pool:
# 当池耗尽时,在引发异常之前连接分配可以阻塞的最长时间(使用负值表示没有限制) 默认 -1
max-wait: -1ms
# 连接池最大连接数(使用负值表示没有限制) 默认 8
max-active: 8
# 连接池中的最大空闲连接 默认 8
max-idle: 8
# 连接池中的最小空闲连接 默认 0
min-idle: 0
# 连接超时时间
timeout: 10000ms

3、config

配置 JedisPool(用于单机版) 资源池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.fatal.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
* Jedis 配置类
* 单机版使用JedisPool
* 集群版使用JedisCluster
* @author: Fatal
* @date: 2018/10/13 0013 13:44
*/
@Configuration
public class JedisConfig {

@Autowired
private RedisProperties properties;

/**
* JedisPool资源池
*/
@Bean
public JedisPool jedisPool() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(properties.getJedis().getPool().getMaxIdle());
config.setMaxTotal(properties.getJedis().getPool().getMaxActive());
config.setMaxWaitMillis(properties.getJedis().getPool().getMaxWait().toMillis());
JedisPool pool = new JedisPool(config,
properties.getHost(),
properties.getPort(),
(int)properties.getTimeout().toMillis(),
properties.getPassword());
return pool;
}

}

4、Test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.fatal.config;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import static org.junit.Assert.*;

/**
* @author: Fatal
* @date: 2018/10/13 0013 14:08
*/
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
public class JedisPoolTest {

@Autowired
private JedisPool pool;

private Jedis jedis;

@Before
public void before () {
// 从资源池拿jedis连接实例
this.jedis = pool.getResource();
}

@Test
public void fun() {
jedis.set("name", "米彩");
jedis.set("age", "18");
log.info("【name】 = {}", jedis.get("name"));
log.info("【age】 = {}", jedis.get("age"));
}

}

5、控制台

1539412753299

总结

  • 单机版使用 JedisPool
  • 集群版使用 JedisCluster

SpringBoot的知识已经有前辈在我们之前探索了。比较喜欢的博主有:唐亚峰 | Battcn方志朋的专栏程序猿DD纯洁的微笑。对这门技术感兴趣的可以去他们的博客逛逛。谢谢他们的分享~~

以上文章是我用来学习的Demo,都是基于 SpringBoot2.x 版本。

源码地址: https://github.com/ynfatal/springboot2-learning/tree/master/chapter13