您的位置:首页 > 其它

执行器模式设计和使用

2017-09-14 15:33 141 查看
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);
}
}

});

}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: