1 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2 配置文件
spring:
redis:
host: 127.0.0.1
port: 6379
timeout: 5000
jedis:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0
3 Redis配置
package com.gp6.springboot30.config;
import com.gp6.springboot30.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
@PropertySource("classpath:/application.yml")
public class RedisConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private Integer redisPort;
@Value("${spring.redis.timeout}")
private Integer redisTimeout;
@Value("${spring.redis.jedis.pool.max-active}")
private Integer jedisPoolMaxActive;
@Value("${spring.redis.jedis.pool.max-wait}")
private Integer jedisPoolMaxWait;
@Value("${spring.redis.jedis.pool.min-idle}")
private Integer jedisPoolMinIdle;
@Value("${spring.redis.jedis.pool.max-idle}")
private Integer jedisPoolMaxIdle;
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(jedisPoolMaxIdle);
jedisPoolConfig.setMaxTotal(jedisPoolMaxActive);
jedisPoolConfig.setMaxWaitMillis(jedisPoolMaxWait);
jedisPoolConfig.setTestOnBorrow(true);
jedisPoolConfig.setTestWhileIdle(true);
return jedisPoolConfig;
}
@Bean
public RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(redisHost);
redisStandaloneConfiguration.setPort(redisPort);
redisStandaloneConfiguration.setDatabase(0);
JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();
jpcb.poolConfig(jedisPoolConfig);
JedisClientConfiguration jedisClientConfiguration = jpcb.build();
return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
initRedisTemplate(redisTemplate, redisConnectionFactory);
return redisTemplate;
}
private void initRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
redisTemplate.setEnableTransactionSupport(true);
redisTemplate.setConnectionFactory(factory);
}
@Bean(name = "redisUtil")
public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {
RedisUtil redisUtil = new RedisUtil();
redisUtil.setRedisTemplate(redisTemplate);
return redisUtil;
}
}
4 Redis工具类
package com.gp6.springboot30.utils;
import com.gp6.springboot30.enums.RedisKeyEnum;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
public class RedisUtil {
private RedisTemplate<String, Object> redisTemplate;
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public boolean set(RedisKeyEnum redisKeyEnum, String value) {
try {
redisTemplate.opsForValue().set(redisKeyEnum.getKey(), value);
return true;
} catch (Exception e) {
return false;
}
}
public boolean set(RedisKeyEnum redisKeyEnum, String value, Integer seconds) {
try {
if (seconds > 0) {
redisTemplate.opsForValue().set(redisKeyEnum.getKey(), value, seconds, TimeUnit.SECONDS);
} else {
set(redisKeyEnum, value);
}
return true;
} catch (Exception e) {
return false;
}
}
public String get(RedisKeyEnum redisKeyEnum) {
return Objects.requireNonNull(redisTemplate.opsForValue().get(redisKeyEnum.getKey())).toString();
}
public boolean delete(RedisKeyEnum redisKeyEnum) {
return redisTemplate.delete(redisKeyEnum.getKey());
}
public boolean expire(RedisKeyEnum redisKeyEnum, Integer seconds) {
try {
if (seconds > 0) {
redisTemplate.expire(redisKeyEnum.getKey(), seconds, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
5 Redis的key统一放入
package com.gp6.springboot30.enums;
public enum RedisKeyEnum {
KEY("KEY", "Redis的Key");
RedisKeyEnum(String key, String desc) {
this.key = key;
this.desc = desc;
}
private String key;
private String desc;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}}
6 测试
package com.gp6.springboot30;
import com.gp6.springboot30.enums.RedisKeyEnum;
import com.gp6.springboot30.utils.RedisUtil;
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;
@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot30ApplicationTests {
@Autowired
private RedisUtil redisUtil;
@Test
public void contextLoads() {
redisUtil.set(RedisKeyEnum.KEY,"23");
}
}