1、增加Jedis的依赖
springboot本身支持的spring-boot-starter-data-redis,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
或者引人第三方依赖(本文采用)
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2、配置redis信息
在application.properties配置文件中,增加redis相关配置信息;
#redis
redis.host=192.168.220.1
redis.port=6379
redis.timeout=3
redis.password=123456
redis.poolMaxTotal=10
redis.poolMaxIdle=10
redis.poolMaxWait=3
参数名 | 含义 | 默认值 | 使用建议 |
---|---|---|---|
maxTotal | 资源池最大连接数 | 8 | |
maxIdle | 资源池允许最大空闲连接数 | 8 | |
minIdle | 资源池确保最少空闲连接数 | 0 | |
jmxEnable | 是否开启jmx监控 | true | 建议开启 |
blockWhenExhausted | 当资源池用尽后,调用者是否要等待 | true | 建议使用默认值 |
maxWaitMillis | 当资源连接池用尽后,调用者的最大等待时间(毫秒) | -1:永不超时 | 不建议使用 |
testOnBorrow | 向资源池借用连接时是否做连接有效性检测(ping),无效连接会被移除 | false | 建议false |
testOnReturn | 向资源池归还连接时是否做连接有效性检测(ping),无效连接会被移除 | false | 建议false |
3、代码实现
(1)实例化redis的配置
@Component
@Data
@ConfigurationProperties(prefix="redis")
public class RedisConfig {
private String host;
private int port;
private int timeout;//秒
private String password;
private int poolMaxTotal;
private int poolMaxIdle;
private int poolMaxWait;//秒
}
(2)JedisPool配置类
@Service
public class RedisPoolFactory {
@Autowired
private RedisConfig redisConfig;
@Bean
public JedisPool JedisPoolFactory() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(redisConfig.getPoolMaxIdle());
poolConfig.setMaxTotal(redisConfig.getPoolMaxTotal());
poolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait() * 1000);
JedisPool jp = new JedisPool(poolConfig, redisConfig.getHost(), redisConfig.getPort(),
redisConfig.getTimeout()*1000, redisConfig.getPassword(), 0);
return jp;
}
}
(3)redis功能实现类(部分功能)
@Service
public class RedisService {
@Autowired
private JedisPool jedisPool;
public <T> T get(String key, Class<T> clazz) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
String str = jedis.get(key);
T t = stringToBean(str, clazz);
return t;
} finally {
returnToPool(jedis);
}
}
public <T> boolean set(String key, T value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
String str = beanToString(value);
if (str == null || str.length() <= 0) {
return false;
}
jedis.set(key, str);
return true;
} finally {
returnToPool(jedis);
}
}
private void returnToPool(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}