JedisPool是jedis客户端链接池,典型使用方式以下: java
Jedis jedis = pool.getResource(); try { //操做redis jedis.set("key" , "value") ; } catch (JedisException e) { pool.returnBrokenResource(jedis); }finally { pool.returnResource(jedis); }
写这种代码写到写多了真的会吐血,一不当心忘了返还jedis到pool,问题就大了。因而想起spring jdbctemplate 实现方式,因此有了一下使用方式: redis
RedisTemplate redisTemplate = new RedisTemplate(RedisFactory.getInstance("redis.properties").getJedisPool()); String value = redisTemplate.execute(new RedisCallback<String>() { @Override public String handle(Jedis jedis) { return jedis.get("key"); } }) ;
哈哈,不再用担忧出错了,RedisTemplate封装了从JedisPool取jedis以及返回池中代码而已,具体以下: spring
/** * Created by wens on 15-3-19. */ public class RedisTemplate { private JedisPool jedisPool ; public RedisTemplate(JedisPool jedisPool){ this.jedisPool = jedisPool ; } public <T> T execute(RedisCallback<T> callback){ Jedis jedis = jedisPool.getResource(); boolean broken = false; try { return callback.handle( jedis); } catch (JedisException e) { broken = true; throw new RedisException(e); } catch (Exception e) { throw new RedisException(e); } finally { returnResource(jedis, broken); } } private void returnResource(Jedis jedis, boolean broken) { if (jedis != null) { if (broken) { jedisPool.returnBrokenResource(jedis); } else { jedisPool.returnResource(jedis); } } } } /** * Created by wens on 15-3-19. */ public interface RedisCallback<T> { public T handle(Jedis jedis); }