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();
}
}