jedis与springboot整合
我们希望spring来管理我们的连接池,创建连接池对象
连接技术的初始化过程
@Configuration
@Value读取配置信息
读取application.properties中的连接信息,连接池配置等
@Bean作用在连接池对象的初始化方法中;
1.编写application.properties
redis的连接节点 config对象的各种属性
spring.redis.nodes=cloud01:6379,cloud01:6380,cloud01:6381
spring.redis.pool.maxTotal=200
spring.redis.pool.maxIdle=8
spring.redis.pool.minIdle=1
2.编写配置类,初始化连接池对象
@Configuration
@ConfigurationProperties(prefix="spring.redis")
public class RedisConfig {
@Value("${nodes}")
private String nodes;
@Value("${maxTotal}")
private Integer maxTotal;
@Value("${minIdle}")
private Integer minIdle;
@Value("${maxIdle}")
private Integer maxIdle;
//构造连接池对象
@Bean
public ShardedJedisPool getPool(){
//收集节点信息
List<JedisShardInfo> infoList=new ArrayList<JedisShardInfo>();
//截取,将nodes利用"," 截取成单个的连接和端口
String[] node = nodes.split(",");//{"10.9.9.9:6379","",""}
for (String hostAndPort : node) {
//"10.9.9.9:6379"
String host=hostAndPort.split(":")[0];
Integer port=Integer.parseInt(hostAndPort.split(":")[1]);
infoList.add(new JedisShardInfo(host,port));}
//配置config
JedisPoolConfig config =new JedisPoolConfig();
config.setMaxTotal(maxTotal);
config.setMaxIdle(maxIdle);
config.setMinIdle(minIdle);
ShardedJedisPool pool=new ShardedJedisPool(config,infoList);
return pool;
}
}
3.代码对象的二次封装
为了不让开发人员对某项技术的学习成本过高,架构师会对jedis的对象做二次封装,只封装当前项目常用的方法
@Service
public class RedisService {
@Autowired
private ShardedJedisPool pool;
/*
* set方法
*/
public void set(String key,String value){
ShardedJedis jedis = pool.getResource();
jedis.set(key, value);
pool.returnResource(jedis);
}
/*
* 设置超时set
*/
public void set(String key,String value,Integer second){
ShardedJedis jedis = pool.getResource();
jedis.set(key, value);
jedis.expire(key, second);
pool.returnResource(jedis);
}
//判断存在
public Boolean exists(String key){
ShardedJedis jedis = pool.getResource();
Boolean exists=jedis.exists(key);
pool.returnResource(jedis);
return exists;
}
//获取数据
public String get(String key){
ShardedJedis jedis = pool.getResource();
String value=jedis.get(key);
pool.returnResource(jedis);
return value;
}
//删除数据
public void del(String key){
ShardedJedis jedis = pool.getResource();
jedis.del(key);
pool.returnResource(jedis);
}
}
4.测试业务层是否可用
模拟controller接收请求查询user对象使用缓存逻辑
生成user的key判断缓存是否存在数据
○ 存在,直接返回请求体中在页面展示
从缓存获取的是字符串,返回的user需要转化
○ 不存在,查询数据库获取User对象
将user对象转化成json字符串存储到redis中
数据库的user对象返回