使用jedis连接客户端redis,以及存在问题分析(二):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对象返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值