[Redis] Redis Data Type과 기본 명령어

hwwwa·2023년 1월 22일
0
post-custom-banner

Redis Data Type과 기본 명령어

String

  • 가장 일반적인 key-value 형태
  • 모든 종류의 문자열 저장 가능
    • 이진 데이터도 저장 가능 (JPEG, HTML fragmentation, ...)
  • key/value 모두 string 형태이며 각각 최대 512MB 길이까지 가능

String 함수

  • SET : key value 매핑 설정. 이미 키가 있는 경우 덮어쓰여짐

    SET key value [EX seconds] [PX miliseconds] [XX|NX]
    • EX : 지정 초 이후에 데이터가 지워짐
    • PX : 지정 밀리초 이후에 데이터가 지워짐
    • XX : 같은 키가 있을 때에만 저장
    • NX : 같은 키가 없을 때에만 저장
  • GET : key에 해당하는 value 반환. 없는 경우 (nil) 반환

    GET key
  • INCR : key에 해당하는 value를 1 증가시킴

    INCR key
  • INCRBY : key에 해당하는 value를 number만큼 증가시킴

    INCRBY key number
  • GETSET : 기존 value를 반환한 후 지정한 value로 재설정

    GETSET key value

List

  • 일반적인 Linked List 형태
  • Array 형식의 데이터 구조
  • List를 사용하면 처음과 끝에 데이터를 빼는 것은 속도가 빠르지만 중간에 데이터를 삽입할 때는 어려움이 있음
  • 생산자-소비자 패턴에서의 Event Queue

List 함수

  • LPUSH : 지정된 모든 value를 key에 저장된 list의 처음에 넣음

    LPUSH key value [value ...]
  • RPUSH : 지정된 모든 value를 key에 저장된 list의 끝에 넣음

    RPUSH key value [value ...]
  • LRANGE : 인덱스 범위를 지정하여 value 가져오기

    LPUSH key start stop

Hash

  • String-String 쌍을 가짐
  • key-value 구조를 여러 개 가지는 object를 저장하기 좋음
  • 원하는 key에만 원하는 value 삽입 가능
    • 공간을 효율적으로 사용 가능
  • 개별 item 조작 가능

Hash 함수

  • HSET : 하나 또는 여러 value 설정

    HSET key field value [field value ...]
    • 이전에는 여러 값을 설정하려면 HMSET을 사용해야 했지만, 업데이트 이후 HSET에서도 여러 값 설정 가능. Redis 4.0 이상부터는 HSET 사용 권장
  • HGET : 설정된 value 조회

    HGET key field
  • HGETALL : 해당 key의 전체 field와 value들을 조회

    HGETALL key
  • HINCRBY : 지정한 field의 value를 number 만큼 증가시킴

    HGET key field number

Set

  • 순서가 없는 String 데이터 집합
  • 여러 값을 하나의 value에 넣을 수 있음
  • 중복값 허용 X
  • 집합 연산 사용 가능
  • 포스트의 태깅 등에 사용 가능

Set 함수

  • SADD : key에 하나 또는 여러 요소 추가
    SADD key member [member ...]
  • SREM : 지정한 하나 이상의 요소를 set에서 삭제. 없는 요소 지정시 무시

    SREM key member [member ...]
  • SSCAN : Set의 모든 요소 조회 시 사용. 분할하여 가져오므로 여러번 호출 필요. SMEMBERS로 한번에 조회 시 장애 발생 가능

    SSCAN key cursor [MATCH pattern] [COUNT count]
  • SUNION : 합집합 연산

    SUNION key [key ...]
  • SINTER : 교집합 연산

    SINTER key [key ...]
  • SDIFF : 차집합 연산

    SDIFF key [key ...]

Sorted Set

  • 중복을 허용하지 않는 Set과 유사한 구조이지만 Score를 사용하여 순서대로 정렬
  • 모든 item이 score와 연결됨 (Hash와 유사)
  • score 순으로 정렬되어 저장
    • score가 같으면 item의 사전순
  • item 추가 시 시간복잡도는 O(log(N))

Sorted Set 함수

  • ZADD : Key에 한 개 또는 여러개의 주어진 score와 함께 member를 추가

    ZADD key [NX|XX] [GT|LT] [CH][INCR] score member [score member ...]
    • GT : 기존에 값이 존재하는 경우 추가하려는 멤버의 score가 더 큰 경우에 추가
    • LT : 기존에 값이 존재하는 경우 추가하려는 멤버의 score가 더 작은 경우에 추가
    • CH : 몇 개의 멤버의 값이 업데이트 되었는지 출력
    • INCR : 지정한 숫자만큼 score 증가 (= ZINCRBY)
  • ZRANGE : index로 범위를 지정하여 스코어가 낮은 순서부터 높은 순서로 출력

    ZRANGE key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
    • WITHSCORES : score도 함께 반환
    • BYSCORE 옵션 지정 시 ZRANGEBYSCORE와 동일한 효과
    • REV : 역순 출력 (= ZREVRANGE)
    • min를 0, max을 -1로 설정하면 전체 조회 수행
  • ZREVRANGE : index로 범위를 지정하여 역순 출력. 스코어가 높은 순서부터 낮은 순서

    ZREVRANGE key start stop [WITHSCORES]
  • ZRANGEBYSCORE : score로 범위를 지정하여 조회

    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
    • 음의 무한대, 양의 무한대 (-inf/+inf) 지정 가능
    • ( 사용 시 입력값을 범위에 포함하지 않음

Stream

  • 5.0 버전 이후 새롭게 추가된 자료구조
  • 카프카에서 영향을 받음
  • 로그를 저장하기에 가장 적절
  • producers, consumers 개념
  • append-only
  • 저장되는 시점의 밀리세컨드, 같은 시간 안에서의 번호 저장
  • 시간 범위 검색 / 신규 추가 데이터 수신 / 소비자별 다른 데이터 수신 (소비자 그룹) 등에 활용
    • 소비자별 다른 데이터 수신 -> 처리량 증대

Key 지정 유의 사항

  • Key는 String Type
  • 가독성이 좋으면서도 스키마를 유지할 수 있도록 Key를 설정해야 함
    • u100flw ➡️ user:1000:followers
  • 적당한 길이로 설정해야 함
  • 키가 너무 길 경우 그 값은 hash의 member로 저장하는 것이 더 좋음
  • 캐시로 사용하는 경우 timeout 설정 권장
post-custom-banner

0개의 댓글