执行器模式设计和使用
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);
}
}
});
}
,博客记录生活,技术改变生活

浙公网安备 33010602011771号