코딩마을방범대
Redis - (4) Java에서 Redis 사용하기(Jedis) 본문
728x90
Redis - (2) 우분투 서버에 Redis 세팅하기
Java 의 Redis Client 는 크게 두 가지가 있다.
원래 Jedis 를 많이 사용했으나 여러 가지 단점 (멀티 쓰레드 불안정, Pool 한계 등등..) 과 Lettuce 의 장점 (Netty 기반이라 비동기 지원 가능) 때문에 Lettuce 로 추세가 넘어가고 있었으며,
그러다 결국 Spring Boot 2.0 부터 Jedis 가 기본 클라이언트에서 deprecated 되고 Lettuce 가 탑재되었다.
build.gradle
dependencies {
...
// https://mvnrepository.com/artifact/redis.clients/jedis
implementation 'redis.clients:jedis:2.1.0'
}
Jedis를 최신 버전으로 설정했더니 아래와 같은 오류가 발생하였다.
java.lang.NoSuchMethodError: 'void redis.clients.jedis.JedisPoolConfig.setMinEvictableIdleTime(java.time.Duration)'
검색해봤더니 스프링 버전과 맞지 않아 오류가 발생하는 것이라고 하여 스프링 버전과 맞춰서 추가해줬다.
코드
버전 문제로 close는 지원되지 않아 quit()로 대체하여 사용하였다.
( set과 get은 String 형식의 입출력 방식 )
public static void jedisTest(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// Jedis풀 생성(JedisPoolConfig, host, port, timeout, password)
JedisPool pool = new JedisPool(jedisPoolConfig, [레디스 서버 주소], [포트번호], 1000, [비밀번호]);
//thread, db pool처럼 필요할 때마다 getResource()로 받아서 쓰고 다 쓰면 close로 닫아야 한다.
Jedis jedis = pool.getResource();
try {
// 데이터 입력
jedis.set("dbkim", "1234");
//데이터 만료시간 지정
jedis.expire("dbkim", 5); //5초 동안만 "dbkim"을 key로 갖는 데이터 유지
Thread.sleep(4000); //쓰레드를 4초간 재우고
System.out.println(jedis.get("dbkim"));//value
Thread.sleep(2000); //1초했더니 운좋으면 살아있어서 2초로 지정
System.out.println(jedis.get("dbkim")); //null
}catch (Exception e) {
e.printStackTrace();
}
// if(jedis != null) {
// jedis.close();
// }
jedis.quit();
}
Lists 형식의 입출력
// 입력
// lpush(키값, 값)
jedis.lpush("dbkim", "first");
jedis.lpush("dbkim", "second");
// 출력
// lrange(키값, start, end)
jedis.lrange("dbkim", 0, 1); // first second
// 첫 번째 요소 삭제
// rpop(키값)
jedis.rpop("dbkim");
// 요소 수정
// lset(키값, 인덱스, 값)
jedis.lset("dbkim", 0, "edit!");
// 요소 출력
// lindex(키값, 인덱스)
jedis.lindex("dbkim", 0)
Sets 형식의 입출력
set의 특징답게 값이 중복될 수 없다.
// 입력
jedis.sadd("dbkim", "first");
jedis.sadd("dbkim", "first");
// 출력
Set<String> dbkim = jedis.smembers("dbkim");
Iterator iter = dbkim.iterator();
while(iter.hasNext()) {
System.out.println(iter.next()); // first
}
// 삭제
jedis.del("dbkim");
Iterator의 장점
1. 컬렉션에서 요소를 제어하는 기능
2. next() 및 previous()를 써서 앞뒤로 이동하는 기능
3. hasNext()를 써서 더 많은 요소가 있는지 확인하는 기능
Hash 형식의 입출력
키와 필드를 이용해 값을 지정할 수 있어 제일 유용!
// 입력
// hset(키값, 필드명, 값)
jedis.hset("user", "name", "dbkim");
jedis.hset("user", "job", "software engineer");
jedis.hset("user", "hobby", "coding");
// 출력
// hget(키값, 필드명)
jedis.hget("user","name"); // dbkim
// 전부 가져오기
// hgetAll(키값)
Map<String, String> fields = jedis.hgetAll("user");
fields.get("job"); //software engineer
참고사이트
Jedis 튜토리얼! 자바에서 Redis 사용하는 방법 (jedis 라이브러리를 이용한 예제, sample)
728x90
'💡 백엔드 > Redis' 카테고리의 다른 글
Redis - (6) Java에서 Redis 사용하기(Repository) (0) | 2023.06.19 |
---|---|
Redis - (5) Java에서 Redis 사용하기(Lettuce) (0) | 2023.06.19 |
Redis - (3) CLI 접근 및 데이터 조회하기 (0) | 2023.06.13 |
Redis - (2) 우분투 서버에 Redis 세팅하기 (0) | 2023.06.13 |
Redis - (1) 기본 개념 (0) | 2023.06.09 |