执行器模式设计和使用

1.定义: 
@Autowired
    private JedisPool jedisPool;

 
    public static interface Execution {
        public <T> T process(Jedis jedis);
    }

    /**
     * 执行请求,开始前获取资源,结束后返回资源
     *
     * @param execution
     * @return
     */
    public <T> T execute(Execution execution) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            T result = execution.process(jedis);
            return result;
        } catch (JedisConnectionException e) {
            throw e;
        } finally {
            if (null != jedis) {
                jedis.close();
            }
        }
    }

2.使用:

 @Autowired
    private JedisExecutionService jedisExecutionService;

    public void set(final String key, final Object value, final int seconds) {

        if (null == key) {
            throw new IllegalArgumentException("Cached key cannot be null.");
        }
        if (null == value) {
            throw new IllegalArgumentException("Cached value cannot be null.");
        }

        jedisExecutionService.execute(new Execution() {

            @Override
            public Object process(Jedis jedis) {
                byte[] byteArray = serialize(value);
                jedis.set(key.getBytes(), byteArray);
                if (seconds > 0) {
                    jedis.expire(key.getBytes(), seconds);
                }
                return null;
            }

        });
    }


 public void expire(final String key, final int seconds) {
        if (null == key) {
            throw new IllegalArgumentException("Cached key cannot be null.");
        }

        jedisExecutionService.execute(new Execution() {

            @Override
            public Object process(Jedis jedis) {
                jedis.expire(key.getBytes(), seconds);
                return null;
            }

        });
    }


  public Object get(final String key) {

        if (null == key) {
            throw new IllegalArgumentException("Cached key cannot be null.");
        }

        return jedisExecutionService.execute(new Execution() {

            @Override
            public Object process(Jedis jedis) {
                byte[] bs = jedis.get(key.getBytes());
                if (null == bs) {
                    return null;
                } else {
                    return deserialize(bs);
                }
            }

        });

    }

  

posted @ 2017-09-14 15:33  雨花梦  阅读(656)  评论(0编辑  收藏  举报