zoukankan      html  css  js  c++  java
  • 从jedis的优雅使用学习代码的优化过程

    《Redis深度历险 核心原理与应用实践》中有一小节讲到了优雅地使用Jedis,整个过程里包含了一些代码优化的思路,对于我们写出优雅代码也有一定的启示。

    【问题】
    Java程序一般都是多线程的应用,我们很少直接使用Jedis,而是从Jedis对象池中取出Jedis选取一个Jedis对象,单线程独占使用,使用完再close。
    代码如下:

    public class ElegantJedis {
    public static void main(String[] args) {
    JedisPool jedisPool = new JedisPool();
    Jedis jedis = jedisPool.getResource();
    doSomething(jedis);
    jedis.close();
    }
    
    public static void doSomething(Jedis jedis){
    //do something with jedis
    }
    }

    但如果这个doSomething这个过程发生了异常,那么Jedis对象将无法归还给对象池,如果异常多次发生,连接池中所有的链接都被持久占用了,新来的请求就会阻塞等待空闲的链接,可能导致程序卡死。
    为避免上述情况,我们需要在代码中使用try-with-resource来保护Jedis对象。

    public static void main(String[] args) {
    JedisPool jedisPool = new JedisPool();
    
    try (Jedis jedis = jedisPool.getResource()) { //用完会自动close
    doSomething(jedis);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    对于一个人员众多的团队,我们无法保证每个人都能够想到上面的细节,也能正确地处理上面的细节,那么我们需要想办法,让大家在用的时候自动地就把这个细节给填上。

    【匿名内部类只暴露出doSomething】
    使用接口业务接口,每个需要调用该方法的只需要实现这个接口,剩下的规范操作交给RedisUtil来完成。
    RedisUtil中提供一个执行的方法,使用这个接口作为传入参数,而接口却是每个调用者自己去具体实现。
    上面这个思路对于我们包装一些操作,减少重复代码是很有帮助的,代码如下图:

     

     
  • 相关阅读:
    20130329 基于校历的授课计划与进度管理系统 文档展示(417更新)
    【记录】搭建本地wordpress全过程
    (转)如何修改WAMP中mysql默认空密码
    SQL SERVER 与ACCESS、EXCEL的数据转换
    用C#得到真正的随机数
    (转)SQL Server 2008 R2 中英文 开发版企业版标准版 下载
    [安装升级] Discuz!X2.5 全新安装图文教程
    Arduino语言
    2010全面兼容IE6/IE7/IE8/FF的CSS HACK写法
    ASP.NET2.0利用httphandler实现URL重写(伪URL及伪静态)
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/15773205.html
Copyright © 2011-2022 走看看