Spring Boot 中使用 Redis

Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, Solr和Cassandra。

准备

环境安装

任选其一

CentOs7.3 搭建 Redis-4.0.1 单机服务

CentOs7.3 搭建 Redis-4.0.1 Cluster 集群服务

测试用例

Github 代码

添加依赖

在项目中添加 spring-boot-starter-data-redis 依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置 RedisTemplate 实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Configuration
public class RedisConfig {

private Logger LOG = LoggerFactory.getLogger(RedisConfig.class);

@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
}

@Bean
public RedisTemplate<String, String> redisTemplate() {
RedisTemplate<String, String> template = new RedisTemplate<String, String>();
template.setConnectionFactory(jedisConnectionFactory());
template.setKeySerializer(new StringRedisSerializer());
LOG.info("create RedisTemplate success");
return template;
}
}

配置参数

application.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0

操作 Redis 工具类

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
public class CacheUtils {

@Resource
private RedisTemplate<String, String> redisTemplate;
private static CacheUtils cacheUtils;

@PostConstruct
public void init() {
cacheUtils = this;
cacheUtils.redisTemplate = this.redisTemplate;
}

/**
* 保存到hash集合中
*
* @param hName 集合名
* @param key
* @param value
*/
public static void hashSet(String hName, String key, String value) {
cacheUtils.redisTemplate.opsForHash().put(hName, key, value);
}

/**
* 从hash集合里取得
*
* @param hName
* @param key
* @return
*/

public static Object hashGet(String hName, String key) {
return cacheUtils.redisTemplate.opsForHash().get(hName, key);
}

/**
省略 N 多方法
。。。。。。
*/
}

注册配置类到容器

1
2
3
4
5
@Configuration
@Import({RedisConfig.class, CacheUtils.class})
public class RedisAutoConfiguration {

}

单元测试

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
import io.ymq.redis.utils.CacheUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import io.ymq.redis.run.Application;
import org.springframework.test.context.junit4.SpringRunner;

/**
* 描述:测试类
*
* @author yanpenglei
* @create 2017-10-16 13:18
**/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class BaseTest {

@Test
public void test() throws Exception {

CacheUtils.hashSet("test", "ymq", "www.ymq.io");

System.out.println(CacheUtils.hashGet("test", "ymq"));
}

}

github https://github.com/souyunku/spring-boot-examples/tree/master/spring-boot-redis