springboot整合redis後, 會提供StringRedisTEmplate和 RedisTemplate 兩個模板類供食用, 有時候這並不能知足咱們的需求, 須要使用 connect 處理, 除了 redisTemplate.getConnection() 以外, 還能夠使用callback機制進行處理redis
具體使用: spring
@Resource(name = "shardedJedisPool") private ShardedJedisPool shardedJedisPool; @Override public <T> T execute(ConnectionCallback<T> action) { ShardedJedis shardedJedis = null; try{ // 從鏈接池中獲取jedis分片對象 shardedJedis = shardedJedisPool.getResource(); return action.doInRedis(shardedJedis); }catch (Exception e){ System.out.println(e.getMessage()); }finally { if(null != shardedJedis){ shardedJedis.close(); } } return null; } /** * attention:真正封裝的方法,很是的簡潔乾脆 */ public String set(final String key, final String value){ return execute(new ConnectionCallback<String>() { @Override public String doInRedis( ShardedJedis shardedJedis) { return shardedJedis.set(key, value); } }); } public String get(final String key){ return execute(new ConnectionCallback<String>(){ @Override public String doInRedis(ShardedJedis shardedJedis) { return shardedJedis.get(key); } }); }
保存: springboot
redisTemplate.execute(new RedisCallback<Object>() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { connection.set( redisTemplate.getStringSerializer().serialize( "user.uid." + user.getUid()), redisTemplate.getStringSerializer().serialize( user.getAddress())); return null; } });
獲取: ide
return redisTemplate.execute(new RedisCallback<User>() { @Override public User doInRedis(RedisConnection connection) throws DataAccessException { byte[] key = redisTemplate.getStringSerializer().serialize( "user.uid." + uid); if (connection.exists(key)) { byte[] value = connection.get(key); String address = redisTemplate.getStringSerializer() .deserialize(value); User user = new User(); user.setAddress(address); user.setUid(uid); return user; } return null; } });
刪除: ui
redisTemplate.execute(new RedisCallback<Object>() { public Object doInRedis(RedisConnection connection) { connection.del(redisTemplate.getStringSerializer().serialize( "user.uid." + uid)); return null; } });
說實話, 不知道比redistemplate 優在哪.. 有知道的能夠跟我說下spa