이 튜토리얼에서는 Jedis 라이브러리를 사용해 Redis의 셋(Set) 타입 값에 대해 생성(Create), 조회(Read), 수정(Update), 삭제(Delete) 작업을 수행하는 방법을 단계별로 살펴봅니다.
Jedis 라이브러리란?
Jedis는 Redis 데이터베이스를 위한 Java 클라이언트 라이브러리입니다. 가볍고 사용법이 매우 간단하며, Redis 2.8.x, 3.x.x 이상 버전 데이터 저장소와 완전히 호환됩니다.
셋(Set) 값이란?
셋은 중복을 허용하지 않는 고유한 요소들의 순서 없는 컬렉션입니다. Redis에서는 셋 자체를 하나의 값으로 저장할 수 있으며, 다양한 Redis 명령어를 통해 저장, 관리, 조회가 가능합니다.
프로젝트 설정
사용 중인 IDE에서 간단한 Maven 프로젝트를 생성한 후, pom.xml 파일에 아래 의존성을 추가합니다.
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.0.1</version> </dependency>
Redis 설치
실습을 진행하려면 최신 버전의 Redis가 로컬 환경에 설치되어 있어야 합니다. 설치 방법은 Redis 공식 문서를 참고하세요.
Jedis 연결하기
Java 코드에서 Redis에 접속하려면 redis.clients.jedis.Jedis 클래스의 객체를 생성합니다.
Jedis jedis = new Jedis();
기본 생성자는 로컬 머신의 기본 포트인 6379에서 실행 중인 Redis 서비스에 연결됩니다. 만약 다른 호스트나 포트를 사용한다면, 생성자에 올바른 호스트 URL과 포트 번호를 인자로 전달해야 합니다.
생성 및 요소 추가 (Create & Add)
sadd 메서드는 셋 값에 하나 이상의 요소를 삽입합니다. 만약 해당 키에 셋 값이 존재하지 않는다면, 삽입 연산을 수행하기 전에 빈 셋 값을 가지는 키를 먼저 생성합니다.
/* 새로운 셋 <set-1>을 생성하고 문자열 a, b, c, d를 삽입 */
jedis.sadd("set-1", "a", "b", "c", "d");
/* 새로운 셋 <set-2>를 생성하고 바이트 배열 형태로 1, 2를 삽입 */
jedis.sadd("set-2".getBytes(), "1".getBytes(), "2".getBytes());
멤버 존재 여부 확인
sismember 메서드는 특정 요소가 셋의 멤버인지 여부를 확인할 때 사용합니다.
/* ab가 <set-1>의 멤버인지 확인 */
jedis.sismember("set-1", "ab");
/* 1이 <set-2>의 멤버인지 확인 */
jedis.sismember("set-2".getBytes(), "1".getBytes());
랜덤 요소 제거 및 반환
spop 메서드는 지정한 키에 저장된 셋 값에서 하나 이상의 무작위(random) 요소를 제거하고 반환합니다.
/* <set-1>에서 무작위 요소 하나를 제거하고 반환 */
jedis.spop("set-1");
/* <set-1>에서 무작위 요소 3개를 제거하고 반환 */
jedis.spop("set-1", 3);
셋 크기 확인
scard 메서드는 지정한 키에 저장된 셋 값의 크기(요소 개수)를 반환합니다.
/* <set-1>의 크기 반환 */
jedis.scard("set-1");
요소 삭제
srem 메서드는 셋 값에서 하나 이상의 지정된 요소를 삭제합니다.
/* <set-1>에서 a, b, c 요소 제거 */
jedis.srem("set-1", "a", "b", "c");
/* <set-2>에서 2, 3 요소 제거 */
jedis.srem("set-2".getBytes(), "2".getBytes(), "3".getBytes());
전체 요소 조회
smembers 메서드는 셋 값에 포함된 모든 요소를 반환합니다.
/* <set-1>의 모든 요소 반환 */
jedis.smembers("set-1");
합집합 (Union)
셋 값에 대해 합집합 연산을 수행하는 메서드는 두 가지입니다.
- sunion : 두 개 이상의 셋에 대해 합집합 연산을 수행하고 그 결과를 배열로 반환합니다.
/* <set-1>과 <set-2>의 합집합 조회 */ jedis.sunion("set-1", "set-2"); - sunionstore : 두 개 이상의 셋에 대해 합집합 연산을 수행하고 그 결과를 새로운 셋 값에 저장합니다.
/* <set-1>과 <set-2>의 합집합을 목적지 셋 <set-3>에 저장 */ jedis.sunionstore("set-3", "set-1", "set-2");
교집합 (Intersection)
셋 값에 대해 교집합 연산을 수행하는 메서드는 두 가지입니다.
- sinter : 두 개 이상의 셋에 대해 교집합 연산을 수행하고 그 결과를 배열로 반환합니다.
/* <set-1>과 <set-2>의 교집합 조회 */ jedis.sinter("set-1", "set-2"); - sinterstore : 두 개 이상의 셋에 대해 교집합 연산을 수행하고 그 결과를 새로운 셋 값에 저장합니다.
/* <set-1>과 <set-2>의 교집합을 목적지 셋 <set-3>에 저장 */ jedis.sinterstore("set-3", "set-1", "set-2");
차집합 (Difference)
셋 값에 대해 차집합 연산을 수행하는 메서드는 두 가지입니다.
- sdiff : 두 개 이상의 셋에 대해 차집합 연산을 수행하고 그 결과를 배열로 반환합니다.
/* <set-1>과 <set-2>의 차집합 조회 */ jedis.sdiff("set-1", "set-2"); - sdiffstore : 두 개 이상의 셋에 대해 차집합 연산을 수행하고 그 결과를 새로운 셋 값에 저장합니다.
/* <set-1>과 <set-2>의 차집합을 목적지 셋 <set-3>에 저장 */ jedis.sdiffstore("set-3", "set-1", "set-2");
참고 자료
- Redis 공식 문서 – Set Commands
지금까지 Jedis 라이브러리를 사용해 Redis 셋(Set) 값에 대해 CRUD 작업을 수행하는 방법을 알아보았습니다. 내용이 유용했다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!