Jedis集成到项目中
Jedis整合到项目中,就可以在项目中使用redis了,作为Java程序狗,这个可以会,贴代码了,不截图了,哈哈
一、maven中的pom.xml中添加依赖
1 <dependency> 2 <groupId>redis.clients</groupId> 3 <artifactId>jedis</artifactId> 4 <version>2.6.0</version> 5 </dependency>
二、spring和Jedis整合
1 <!-- 连接池配置 --> 2 <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> 3 <property name="maxTotal" value="${redis.maxTotal}"/> 4 </bean> 5 6 <!-- 分片式集群连接池 --> 7 <bean class="redis.clients.jedis.ShardedJedisPool"> 8 <constructor-arg index="0" ref="jedisPoolConfig" /> 9 <constructor-arg index="1"> 10 <list> 11 <bean class="redis.clients.jedis.JedisShardInfo"> 12 <constructor-arg index="0" value="${redis.node1.host}"></constructor-arg> 13 <constructor-arg index="1" value="${redis.node1.port}"></constructor-arg> 14 </bean> 15 </list> 16 </constructor-arg> 17 </bean>
三、封装RedisService
注意:这个是待优化的代码,只有jedis分片对象ShardedJedis调用不同的方法而已,其他的代码完全一样,这个是可以优化的,这个优化方法很巧妙
1 @Service 2 publicclass RedisService { 3 4 @Autowired 5 private ShardedJedisPool shardedJedisPool; 6 7 /** 8 * 执行set操作 9 * 10 * @param key 11 * @param value 12 * @return 13 */ 14 public String set(String key, String value) { 15 ShardedJedis shardedJedis = null; 16 try { 17 // 从连接池中获取到jedis分片对象 18 shardedJedis = shardedJedisPool.getResource(); 19 return shardedJedis.set(key, value); 20 } finally { 21 if (null != shardedJedis) { 22 // 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态 23 shardedJedis.close(); 24 } 25 } 26 } 27 28 /** 29 * 执行get操作 30 * 31 * @param key 32 * @return 33 */ 34 public String get(String key) { 35 ShardedJedis shardedJedis = null; 36 try { 37 // 从连接池中获取到jedis分片对象 38 shardedJedis = shardedJedisPool.getResource(); 39 return shardedJedis.get(key); 40 } finally { 41 if (null != shardedJedis) { 42 // 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态 43 shardedJedis.close(); 44 } 45 } 46 } 47 48 }
四、优化RedisService
1、定义接口,借助泛型
public interface Function<T, E> { public T callback(E e); }
2、定义一个通用方法,减少相同代码的编写
1 @Autowired 2 private ShardedJedisPool shardedJedisPool; 3 4 private <T> T execute(Function<T, ShardedJedis> fun) { 5 ShardedJedis shardedJedis = null; 6 try { 7 // 从连接池中获取到jedis分片对象 8 shardedJedis = shardedJedisPool.getResource(); 9 return fun.callback(shardedJedis); 10 } finally { 11 if (null != shardedJedis) { 12 // 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态 13 shardedJedis.close(); 14 } 15 } 16 }
3、调用通用的代码,实现不同的逻辑
注意:这个方法有点太巧妙了,有木有,这里面用到了JavaScript中的回调函数的思想,第一次感到代码之美
1 /** 2 * 执行set操作,设置数据 3 * 4 * @param key 5 * @param value 6 * @return 7 */ 8 public String set(String key, String value) { 9 return this.execute(new Function<String, ShardedJedis>() { 10 11 @Override 12 public String callback(ShardedJedis e) { 13 return e.set(key, value); 14 } 15 16 }); 17 } 18 19 /** 20 * 执行set操作,设置数据,并且设置生存时间,单位:秒 21 * 22 * @param key 23 * @param value 24 * @param seconds 25 * @return 26 */ 27 public String set(String key, String value, Integer seconds) { 28 return this.execute(new Function<String, ShardedJedis>() { 29 30 @Override 31 public String callback(ShardedJedis e) { 32 String str = e.set(key, value); 33 e.expire(key, seconds); 34 return str; 35 } 36 }); 37 } 38 39 /** 40 * 执行get操作,获取数据 41 * 42 * @param key 43 * @return 44 */ 45 public String get(String key) { 46 return this.execute(new Function<String, ShardedJedis>() { 47 48 @Override 49 public String callback(ShardedJedis e) { 50 return e.get(key); 51 } 52 53 }); 54 } 55 56 /** 57 * 删除一个key 58 * 59 * @param key 60 * @return 61 */ 62 public Long del(String key) { 63 return this.execute(new Function<Long, ShardedJedis>() { 64 65 @Override 66 public Long callback(ShardedJedis e) { 67 return e.del(key); 68 } 69 70 }); 71 } 72 73 /** 74 * 设置生存时间,单位:秒 75 * 76 * @param key 77 * @param seconds 78 * @return 79 */ 80 public Long expire(String key,Integer seconds) { 81 return this.execute(new Function<Long, ShardedJedis>() { 82 83 @Override 84 public Long callback(ShardedJedis e) { 85 return e.expire(key, seconds); 86 } 87 88 }); 89 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步