코딩마을방범대

Redis - (4) Java에서 Redis 사용하기(Jedis) 본문

💡 백엔드/Redis

Redis - (4) Java에서 Redis 사용하기(Jedis)

신짱구 5세 2023. 6. 19. 14:31

Redis - (1) 기본 개념

Redis - (2) 우분투 서버에 Redis 세팅하기


 

Java 의 Redis Client 는 크게 두 가지가 있다.

원래 Jedis 를 많이 사용했으나 여러 가지 단점 (멀티 쓰레드 불안정, Pool 한계 등등..) 과 Lettuce 의 장점 (Netty 기반이라 비동기 지원 가능) 때문에 Lettuce 로 추세가 넘어가고 있었으며,

 

그러다 결국 Spring Boot 2.0 부터 Jedis 가 기본 클라이언트에서 deprecated 되고 Lettuce 가 탑재되었다.

 

 

build.gradle

Jedis 의존성을 추가해준다

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

 

 

 

 

 


참고사이트

[Redis] SpringBoot + Redis

Jedis 튜토리얼! 자바에서 Redis 사용하는 방법 (jedis 라이브러리를 이용한 예제, sample)

 

 

 

SMALL