zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    servlet乱码以及解决
    javascript正则简单入门
    javascript创建自定义对象和prototype
    java 对象初始化和代码块初始化顺序
    java final 和instanceof 关键字
    【记录】自学JavaScript第七周
    【记录】自学JavaScript第六周
    获取节点名称及节点值
    正则表达式中的替换字符串示例
    部分正则表达式基本函数用法示例
  • 原文地址:https://www.cnblogs.com/ssh-html/p/10447346.html
Copyright © 2011-2022 走看看