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     }
原文地址:https://www.cnblogs.com/ssh-html/p/10447346.html