Jedis 는 Redis 를 자바에서 사용하기 위한 라이브러리이다.

Jedis 외에도 비동기 기반의 Lettuce 와 같은 고성능의 라이브러리도 있지만

개인적으로는 Jedis 를 정말 편하게 사용하였다.


그전에 먼저 Redis란 ? 

: Remote Dictionary System의 약자로 쉽게 말하면 "인메모리 저장소" 라고 보면 된다.

일단 처리속도가 빠르고, 데이터가 메모리에 저장하면서 데이터를 보존하고, Master-Slave 구성이 가능하다.

사용하기가 쉬우며 <key, value> 형태로 저장되어 불러올 수 있다. 


그럼 Jedis 를 활용하여 연결을 해보겠다.

메이븐 빌드를 활용했기 때문에 pom.xml 에 추가한다.

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.2.0</version>
</dependency>

https://mvnrepository.com/artifact/redis.clients/jedis 여기서 최신의 라이브러리를 확인이 가능하다.


Redis 서버가 구동 중이어야 하며, 이제 Redis에 접속해보겠다.

public class RedisService { @Autowired private RedisTemplate<String, Object> template; // Redis Connection Check @SuppressWarnings("resource") public boolean isConnected(String key) { String redisOption = System.getProperty(RedisConfig.REDIS_OPTION); Jedis testDbObj = new Jedis(RedisConfig.DEV_REDIS_HOST, RedisConfig.DEV_REDIS_PORT); // real server set if (redisOption != null && !redisOption.isEmpty()) { String[] optionArr = redisOption.split("\\|"); testDbObj = new Jedis(StringUtils.split(optionArr[0], ":")[0], Integer.parseInt(StringUtils.split(optionArr[0], ":")[1])); testDbObj.auth(optionArr[1]); } try { testDbObj.ping(); //Redis Moved setValue(key, "testType", "test"); System.out.println(getValue(key, "testType")); testDbObj.close(); GeneralLogger.debug("Redis is alive"); return true; } catch (JedisConnectionException e) { GeneralLogger.debug("Redis is disconnected"); } catch (JedisDataException e) { System.out.println(e); GeneralLogger.debug("Redis is busy"); } testDbObj.close(); return false; } public Object getObject(String key) { return template.opsForValue().get(key); } public String getValue(String key, String field) { String value = ""; try { value = template.opsForHash().get(key, field).toString(); } catch (Exception e) { GeneralLogger.debug("캐시 항목이 없습니다. key/field:" + key + "/" + field); } return value; } public void setObject(String key, Object value) { template.opsForValue().set(key, value); template.expire(key, 60 * 30, TimeUnit.SECONDS);//만료시간 설정 } public void setValue(String key, String field, String value) { template.opsForHash().put(key, field, value); template.expire(key, 60 * 30, TimeUnit.SECONDS); //만료시간 설정 } public Boolean deleteHashOps(String key, String field) { template.opsForHash().delete(key, field); Object existingHashOps = template.opsForHash().get(key, field); if (existingHashOps != null) { return false; } return true; } public void resetRedisData(String key) { if (this.isConnected(key)) { try { template.delete(key); } catch (Exception e) { GeneralLogger.debug("캐시 항목 삭제에 실패했습니다. key:" + key); e.printStackTrace(); } } } }


위 코드는 실제 구현한 코드에서 일부 수정하여 올린 사항임을 참고하길 바란다. (오타가 있을 수 있음)

또한 Redis 는 한번 사용 후 close() 를 해주는 것이 바람직하다.

이상 Jedis 를 활용한 Redis 접근 방법 ! 


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기