本次和大家分享的是在springboot集成使用redis,这里使用的是redis的jedis客户端,如下添加依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
然后需要redis的相关配置(这里我的redis密码是空)
spring:
redis:
single: 192.168.146.28:6378
jedis:
pool:
max-idle: 8
max-active: 8
max-wait: 3000
timeout: 3000
password:
这是redis的一般配置,具体调优可以设置这些参数,下面在JedisConfig类中读取这些设置
@Value("${spring.redis.single}")
private String strSingleNode;
@Value("${spring.redis.jedis.pool.max-idle}")
private Integer maxIdle;
@Value("${spring.redis.jedis.pool.max-active}")
private Integer maxActive;
@Value("${spring.redis.jedis.pool.max-wait}")
private Integer maxAWait;
@Value("${spring.redis.timeout}")
private Integer timeout;
@Value("${spring.redis.password}")
private String password;
有上面的配置,就需要有代码里面设置下,这里创建一个返回JedisPoolConfig的方法
/**
* jedis配置
*
* @return
*/
public JedisPoolConfig getJedisPoolConfig() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(maxIdle); #最大空闲数
config.setMaxWaitMillis(maxAWait); #最大等待时间
config.setMaxTotal(maxActive); #最大连接数
return config;
}
有了配置,接下来就创建JedisPool,这里把JedisPool托管到spring中
/**
* 获取jedispool
*
* @return
*/
@Bean
public JedisPool getJedisPool() {
JedisPoolConfig config = getJedisPoolConfig();
System.out.println("strSingleNode:" + this.strSingleNode);
String[] nodeArr = this.strSingleNode.split(":");
JedisPool jedisPool = null;
if (this.password.isEmpty()) {
jedisPool = new JedisPool(
config,
nodeArr[0],
Integer.valueOf(nodeArr[1]),
this.timeout);
} else {
jedisPool = new JedisPool(
config,
nodeArr[0],
Integer.valueOf(nodeArr[1]),
this.timeout,
this.password);
}
return jedisPool;
}
上面简单区分了无密码的情况,到此jedis的配置和连接池就基本搭建完了,下面就是封装使用的方法,这里以set和get为例;首先创建个JedisComponent组件,代码如下
/**
* Created by Administrator on 2018/8/18.
*/
@Component
public class JedisComponent {
@Autowired
JedisPool jedisPool;
public boolean set(String key, String val) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.set(key, val).equalsIgnoreCase("OK");
} finally {
if (jedis != null) {
jedis.close();
}
}
}
public <T> boolean set(String key, T t) {
String strJson = JacksonConvert.serilize(t);
if (strJson.isEmpty()) {
return false;
}
return this.set(key, strJson);
}
public String get(String key) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.get(key);
} finally {
if (jedis != null) {
jedis.close();
}
}
}
public <T> T get(String key, Class<T> tClass) {
String strJson = this.get(key);
return JacksonConvert.deserilize(strJson, tClass);
}
}
有了对jedis的调用封装,我们在Controller层的测试用例如下
@Autowired
JedisComponent jedis;
@GetMapping("/setJedis/{val}")
public boolean setJedis(@PathVariable String val) {
return jedis.set("token", val);
}
@GetMapping("/getJedis")
public String getJedis() {
return jedis.get("token");
}
运行set和get的接口效果如