java中使用redis(jedis)
1、背景
springboot + maven
1、引入依赖
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2、在配置文件中添加配置(application.dev.properties)
######### redis
# Redis服务器地址
#jedis.host=120.79.19.125
jedis.host=127.0.0.1
# Redis服务器连接端口
jedis.port=6379
# Redis服务器连接密码
jedis.password=123456
# 连接池中的最大空闲连接
jedis.maxIdle=300
# 连接池中的最小空闲连接
jedis.minIdle=10
# 连接池中的最大连接数
jedis.maxTotal=30
# 连接池最大阻塞等待时间(使用负值表示没有限制)
jedis.maxWaitMillis=1000
# 连接超时时间(毫秒)
jedis.timeout=0
# 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
#jedis.blockWhenExhausted=true
3、创建RedisConfig类
@Data
@Component
//@ConfigurationProperties(prefix = "jedis")
@Configuration
public class RedisConfig/* implements Serializable */{
//private static final long serialVersionUID = 1097752157567754456L;
@Value("${jedis.host}")
private String host;
@Value("${jedis.port}")
private Integer port;
@Value("${jedis.password}")
private String password;
@Value("${jedis.timeout}")
private Integer timeout;
@Value("${jedis.maxIdle}")
private Integer maxIdle;
@Value("${jedis.minIdle}")
private Integer minIdle;
@Value("${jedis.maxTotal}")
private Integer maxTotal;
@Value("${jedis.maxWaitMillis}")
private Long maxWaitMillis;
//private Boolean blockWhenExhausted;
@Bean
public JedisPool redisPoolFactory() throws Exception{
System.out.println("JedisPool注入成功!!");
System.out.println("redis地址:" + host + ":" + port);
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
// 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
// 是否启用pool的jmx管理功能, 默认true
jedisPoolConfig.setJmxEnabled(true);
return new JedisPool(jedisPoolConfig, host, port, timeout, password);
}
}
下面是测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationTests {
@Autowired
private JedisPool jedisPool;
@Test
public void test(){
Jedis jedis = jedisPool.getResource();
System.out.println("连接成功");
System.out.println(jedis.ping());
//jedis.set("userName","fengling4");
System.out.println(jedis.get("userName"));
}
}
注意: 测试的时候要在项目自动生成的test文件夹下的测试启动类下进行测试,在一个普通的类中写main方法运行会报错空指针
另外 上面用的是@Value注解获取配置的值,还有一种方法是
RedisConfig.java
@Data
@Component
@ConfigurationProperties(prefix = "jedis")
public class RedisConfig/* implements Serializable */{
//private static final long serialVersionUID = 1097752157567754456L;
private String host;
private Integer port;
private String password;
private Integer timeout;
private Integer maxIdle;
private Integer minIdle;
private Integer maxTotal;
private Long maxWaitMillis;
//private Boolean blockWhenExhausted;
新建一个RedisUtil.java
@Configuration
public class RedisUtil {
@Autowired
private RedisConfig redisConfig;
@Bean
public JedisPool jedisPool() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMinIdle(redisConfig.getMinIdle());
config.setMaxIdle(redisConfig.getMaxIdle());
config.setMaxWaitMillis(redisConfig.getMaxWaitMillis());
config.setMaxTotal(redisConfig.getMaxTotal());
//config.setBlockWhenExhausted(redisConfig.getBlockWhenExhausted());
// 是否启用pool的jmx管理功能, 默认true
config.setJmxEnabled(true);
return new JedisPool(config,
redisConfig.getHost(),
redisConfig.getPort(),
redisConfig.getTimeout(),
redisConfig.getPassword());
}
}
测试同上
说明:
@ConfigurationProperties(prefix = "jedis")
这个就是获取以jedis开头的配置的属性值,属性值的映射会根据jedis后面的属性名来进行映射
注意:这里会有一个这样的报错,在RedisConfig类 里面,但这个东西并不影响程序的运行(不影响redis的使用)
解决办法:
添加依赖
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-configuration-processor </artifactId>
<optional> true </optional>
</dependency>
但是又会有另外一个东西,也不影响程序的运行,这个我就不知道怎么去掉它了