一、spring-Data-Redis简介
spring-data-redis针对jedis提供了如下功能:
1、 连接池自动管理,提供了一个高度封装的“RedisTemplate”类
2、针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
ValueOperations:简单K-V操作
SetOperations:set类型数据操作
ZSetOperations:zset类型数据操作
HashOperations:针对map类型的数据操作
ListOperations:针对list类型的数据操作
二、具体实现步骤
1、引入maven依赖
- starter-data-redis依赖中包含了jedis依赖
<!-- Spring Data Redis 的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>
2、添加application.yml配置文件,配置连接池参数
- 有时候timeout、max-wait参数会报错,不用处理。可以正常编译
spring:
redis:
host: 127.0.0.1
port: 6379
timeout: 10000
block-when-exhausted : true
jedis:
pool:
max-idle: 200
min-idle: 50
max-active: 1024
max-wait: 10000
3、创建RedisConfig配置类,类容如下
- 配置信息由注解可见
package com.example.goshopping.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.max-wait}")
private long maxWaitMillis;
@Value("${spring.redis.block-when-exhausted}")
private boolean blockWhenExhausted;
/**
* 1.创建JedisPoolConfig对象。在该对象中完成一些链接池配置
*/
@Bean
public JedisPoolConfig jedisPoolConfig() throws Exception {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
// 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
jedisPoolConfig.setBlockWhenExhausted(blockWhenExhausted);
// 是否启用pool的jmx管理功能, 默认true
jedisPoolConfig.setJmxEnabled(true);
return jedisPoolConfig;
}
/**
* 2.创建JedisConnectionFactory:配置redis链接信息
*/
@Bean
@ConfigurationProperties(prefix = "spring.redis")
public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
JedisConnectionFactory factory = new JedisConnectionFactory();
//关联链接池的配置对象
factory.setPoolConfig(jedisPoolConfig);
//配置链接Redis的信息
//主机地址
factory.setHostName(host);
//端口
factory.setPort(6379);
return factory;
}
/**
* 3.创建RedisTemplate:用于执行Redis操作的方法
*/
@Bean
public RedisTemplate<String,Object> redisTemplate(JedisConnectionFactory factory){
RedisTemplate<String, Object> template = new RedisTemplate<>();
//关联
template.setConnectionFactory(factory);
//为key设置序列化器
template.setKeySerializer(new StringRedisSerializer());
//为value设置序列化器
template.setValueSerializer(new StringRedisSerializer());
return template;
}
}
4、使用以及测试结果
- 通过注入RedisTemplate实例,再调用相关接口实现对redis操作
@RestController
public class testController {
private Logger LOG=LoggerFactory.getLogger(testController.class);
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@RequestMapping("/hello")
public String hello(){
redisTemplate.opsForValue().set("v0","123");
String v=(String) redisTemplate.opsForValue().get("v0");
System.out.println("redis链接测试:"+v);
return "Hello world!!";
}
}
- 测试结果