Redis Hash 실습: 키-필드-값 데이터 구조 관리하기

2024. 9. 11. 10:39·DB/Redis

아래는 주어진 Redis 명령어들에 대한 설명입니다.

1. HSET: 해시(Hash)에 필드-값 추가

HSET users:1:info name greg email greg@gmail.com phone 010-5897-4859
  • 설명: Redis의 HSET 명령어는 해시(Hash) 자료구조에 필드-값 쌍을 추가합니다.
  • 동작: users:1:info라는 해시에 "name", "email", "phone" 필드와 각각 "greg", "greg@gmail.com", "010-5897-4859" 값을 추가합니다.
  • 결과: 3개의 필드가 추가되었으므로, (integer) 3이 반환됩니다.

2. HGET: 해시에서 특정 필드의 값 조회

HGET users:1:info name
HGET users:1:info email
HGET users:1:info phone
  • 설명: HGET 명령어는 해시에서 특정 필드의 값을 조회합니다.
  • 동작: users:1:info 해시에서 "name", "email", "phone" 필드의 값을 각각 조회합니다.
  • 결과:
    • "name" 필드의 값은 "greg".
    • "email" 필드의 값은 "greg@gmail.com".
    • "phone" 필드의 값은 "010-5897-4859".

3. HGETALL: 해시의 모든 필드-값 쌍 조회

HGETALL users:1:info
  • 설명: HGETALL 명령어는 해시의 모든 필드와 값을 조회합니다.
  • 동작: users:1:info 해시의 모든 필드와 값을 반환합니다.
  • 결과:
    • "name", "greg", "email", "greg@gmail.com", "phone", "010-5897-4859".

4. HDEL: 해시에서 특정 필드 삭제

HDEL users:1:info email
  • 설명: HDEL 명령어는 해시에서 특정 필드를 삭제합니다.
  • 동작: users:1:info 해시에서 "email" 필드를 삭제합니다.
  • 결과: (integer) 1이 반환되며, 필드가 삭제되었음을 의미합니다.

5. HSET: 새로운 필드 추가

HSET users:1:info visits 0
  • 설명: HSET 명령어를 사용해 새로운 필드 "visits"를 users:1:info 해시에 추가하고 값으로 0을 저장합니다.
  • 결과: (integer) 1이 반환되며, 필드가 추가되었음을 의미합니다.

6. HGET: 특정 필드의 값 조회 (방문 횟수)

HGET users:1:info visits
  • 설명: HGET 명령어를 사용해 users:1:info 해시에서 "visits" 필드의 값을 조회합니다.
  • 결과: "0"이 반환됩니다.

7. HINCRBY: 해시의 특정 필드 값 증가

HINCRBY users:1:info visits 1
HINCRBY users:1:info visits 10
  • 설명: HINCRBY 명령어는 해시의 특정 필드 값을 지정된 양만큼 증가시킵니다.
  • 동작:
    • 첫 번째 명령어는 "visits" 필드의 값을 1 증가시킵니다. 기존 값이 0이었으므로 증가 후 값은 1이 됩니다.
    • 두 번째 명령어는 "visits" 필드의 값을 10 증가시킵니다. 현재 값이 1이므로, 증가 후 값은 11이 됩니다.
  • 결과:
    • 첫 번째 명령어 결과: (integer) 1.
    • 두 번째 명령어 결과: (integer) 11.

요약:

  • HSET: 해시에 필드-값 쌍을 저장합니다. 여러 필드와 값을 동시에 저장할 수 있습니다.
  • HGET: 해시에서 특정 필드의 값을 조회합니다.
  • HGETALL: 해시의 모든 필드-값 쌍을 조회합니다.
  • HDEL: 해시에서 특정 필드를 삭제합니다.
  • HINCRBY: 해시의 특정 필드 값을 지정된 양만큼 증가시킵니다.

이 예제에서는 사용자 정보를 해시(Hash) 자료구조로 관리하며, 사용자 정보 조회 및 수정, 필드 삭제, 방문 횟수 증가 등의 동작을 보여줍니다.


자바 코드로 실습한 내용입니다.

코드

public static void main(String[] args) {
    System.out.println("Hello world!");

    try (var jedisPool = new JedisPool("127.0.0.1", 6379)) {
        try (Jedis jedis = jedisPool.getResource()) {

            // HSET 명령어를 사용하여 해시에 필드와 값을 저장
            jedis.hset("users:2:info", "name", "greg2");

            // 해시에 여러 필드와 값을 저장할 수 있는 HashMap 준비
            var userInfo = new HashMap<String, String>();
            userInfo.put("email", "greg3@fastcampus.co.kr");
            userInfo.put("phone", "010-XXXX-YYYY");

            // HSET을 사용하여 여러 필드와 값을 저장
            jedis.hset("users:2:info", userInfo);

            // HDEL 명령어로 특정 필드를 삭제
            jedis.hdel("users:2:info", "phone");

            // HGET 명령어로 특정 필드 값 조회
            System.out.println(jedis.hget("users:2:info", "email"));

            // HGETALL 명령어로 해시의 모든 필드-값 쌍 조회
            Map<String, String> user2Info = jedis.hgetAll("users:2:info");
            user2Info.forEach((k, v) -> System.out.printf("%s %s%n", k, v));

            // HINCRBY 명령어로 필드의 값을 증가
            jedis.hincrBy("users:2:info", "visits", 30);
        }
    }
}

코드 설명

1. JedisPool과 Jedis 객체 생성

try (var jedisPool = new JedisPool("127.0.0.1", 6379)) {
    try (Jedis jedis = jedisPool.getResource()) {
        // Redis 명령어 수행
    }
}
  • 설명: JedisPool은 Redis 서버와 연결할 수 있는 커넥션 풀을 생성하는 객체입니다. getResource()를 호출하여 Jedis 객체를 가져와 Redis 명령어를 수행합니다.
  • 사용 목적: JedisPool을 사용하면 다수의 클라이언트가 효율적으로 Redis 서버와 연결을 공유할 수 있습니다.

2. HSET 명령어로 해시에 값 저장

jedis.hset("users:2:info", "name", "greg2");
  • 설명: jedis.hset은 Redis의 해시 자료구조에 특정 필드-값 쌍을 저장하는 메서드입니다.
  • 사용 목적: "users:2:info"라는 해시에 "name" 필드에 "greg2" 값을 저장합니다.

3. 여러 필드와 값을 한 번에 저장하기 위한 HashMap 사용

var userInfo = new HashMap<String, String>();
userInfo.put("email", "greg3@fastcampus.co.kr");
userInfo.put("phone", "010-XXXX-YYYY");
jedis.hset("users:2:info", userInfo);
  • 설명: 자바의 HashMap을 사용하여 여러 필드와 값을 저장합니다. 이후 jedis.hset 메서드를 통해 userInfo에 저장된 필드-값 쌍을 Redis의 해시에 저장합니다.
  • 사용 목적: 한 번에 여러 개의 필드-값을 저장하기 위해 HashMap을 사용했습니다.

4. HDEL 명령어로 해시에서 특정 필드 삭제

jedis.hdel("users:2:info", "phone");
  • 설명: jedis.hdel은 Redis의 해시에서 특정 필드를 삭제하는 메서드입니다.
  • 사용 목적: "users:2:info" 해시에서 "phone" 필드를 삭제합니다.

5. HGET 명령어로 특정 필드 값 조회

System.out.println(jedis.hget("users:2:info", "email"));
  • 설명: jedis.hget은 Redis 해시에서 특정 필드의 값을 가져옵니다.
  • 사용 목적: "users:2:info" 해시에서 "email" 필드의 값을 조회하고 출력합니다.

6. HGETALL 명령어로 해시의 모든 필드-값 쌍 조회

Map<String, String> user2Info = jedis.hgetAll("users:2:info");
user2Info.forEach((k, v) -> System.out.printf("%s %s%n", k, v));
  • 설명: jedis.hgetAll은 Redis 해시의 모든 필드-값 쌍을 조회하는 메서드입니다.
  • 사용 목적: "users:2:info" 해시의 모든 필드-값 쌍을 가져와 출력합니다.

7. HINCRBY 명령어로 필드의 값을 증가

jedis.hincrBy("users:2:info", "visits", 30);
  • 설명: jedis.hincrBy는 Redis 해시에서 숫자 값 필드를 지정된 값만큼 증가시키는 메서드입니다.
  • 사용 목적: "users:2:info" 해시의 "visits" 필드를 30만큼 증가시킵니다. "visits" 필드가 없다면 자동으로 생성되고 값이 30으로 설정됩니다.

요약:

  • 이 코드는 Redis 해시 자료구조를 사용하여 사용자 정보를 저장하고 관리하는 예제입니다.
  • Jedis를 사용하여 Redis와의 통신을 관리하며, HSET, HGET, HDEL, HINCRBY 등의 명령어를 통해 해시에 값을 저장하고 조회, 삭제 및 필드 값 증가 작업을 수행합니다.
저작자표시 (새창열림)

'DB > Redis' 카테고리의 다른 글

Redis Geospatial 실습: 좌표 기반 데이터 처리  (0) 2024.09.11
Redis Sorted Set 실습: 정렬된 데이터를 효율적으로 처리하기  (0) 2024.09.11
Redis Set 실습: 집합 연산과 활용법  (0) 2024.09.11
Redis 문자열 실습: 기본 데이터 타입 다루기  (1) 2024.09.11
Redis 데이터타입 정리: 문자열부터 복합 데이터까지  (0) 2024.09.11
'DB/Redis' 카테고리의 다른 글
  • Redis Geospatial 실습: 좌표 기반 데이터 처리
  • Redis Sorted Set 실습: 정렬된 데이터를 효율적으로 처리하기
  • Redis Set 실습: 집합 연산과 활용법
  • Redis 문자열 실습: 기본 데이터 타입 다루기
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (284) N
      • 여러가지 (108) N
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (2) N
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 운영체제 (0)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (5)
        • 암호화폐 (5)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    celery
    그리디
    FastAPI
    자바
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    파이썬
    OOP
    Python
    spring
    Spring Boot
    프로그래머스
    Spring WebFlux
    RDS
    WebFlux
    java
    시험
    ecs
    취업리부트
    DP
    완전탐색
    SAA
    reactor
    EC2
    AWS
    docker
    항해99
    백준
    mybatis
    Docker-compose
    Redis
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
Redis Hash 실습: 키-필드-값 데이터 구조 관리하기
상단으로

티스토리툴바