[Redis] 2. Redis 자료 구조

최진민·2021년 11월 25일
0

Redis

목록 보기
2/6
post-thumbnail
  • Redis 자료 구조
  • Strings
  • Lists
  • Sets
  • Sorted Sets
  • Hashes
  • Redis는 다양한 자료구조를 제공합니다.
  • 이를 통해, 생산성 및 성능을 향상시킬 수 있습니다.



1. Redis 레퍼런스에서 제공하는 자료구조


  • 종류

    • Strings : 기본적인 key-value 구조
    • Lists
      • String elements의 모음집
      • 삽입된 순서 유지
      • 기본 형식 : Linked List
    • Sets
      • 순서 X
      • 유일한 값들의 모임
    • Sorted Sets
      • Sets + score(순위)를 통해 score 값을 기준으로 순서 유지
    • Hashes : 내부에 key-value 구조가 더해짐
    • Bit arrays (bitMaps) : bit array 자료구조
    • HyperLogLogs
      • 집합의 원소의 갯수 추정
      • 개선된 Set
    • Streams
      • Redis 5.0 이후
      • Log 또는 IoT와 같이 지속적이고 빠르게 발생하는 데이터를 처리
  • 참고 : Redis 레퍼런스



2. Strings


  • 일반적인 key - value 형식
  • key와 value는 binary safe하기 때문에 어느 데이터라도 key와 value가 될 수 있다.

2.1 특징

  • 최대 길이 512MB
  • incr, decr, incrby 사용
  • append 사용
  • getrange, setrange를 통해 랜덤 엑세스 가능
    • 랜덤 액세스 : 어느 위치든 index를 통해 접근 가능

2.2 예제

> set akey bvalue
OK
> get akey
"bvalue"
> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152



3. Lists


  • Linked List와 유사
    • 처음, 마지막에 element를 추가/삭제/조회하는 것은 O(1)의 속도
    • index 조회 -> O(N)
      • 조회할 index가 많다면? => Sorted Set 추천

3.1 특징

  • lpush : 첫 번째 부분에 push(insert)
  • lrange : 일정 크기로 반환
  • lpush + ltrim : Lists의 크기를 항상 일정하게 고정
  • rpush + rpop : Stack
  • lpush + rpop : Queue

3.2 예제

> rpush list A
(integer) 1 # 들어있는 원소 수 반환
> rpush list B
(integer) 2
> lpush list CC
(integer) 3
> lrange list 0 -1 # 0을 기준으로 1은 다음, -1은 마지막, -2는 마지막에서 2번째
1) "CC"
2) "A"
3) "B"

###
> rpush list 1 2 3 4 5 "aaa"
(integer) 6
> lrange 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "aaa"

###
> rpush list a b c
(integer) 3
> rpop
"c" # 삭제되는 것 반환
> rpop
"b"
> rpop
"a"



4. Sets


  • 순서가 보장되지 않는 Strings 집합
  • 추가, 삭제, 조회 => O(1)
  • 동일한 value를 추가해도 추가되지 않음 (중복 불가)

4.1 특징

  • 사용처

    • 트래킹에 사용
      • ex) 블로그에 접근한 ip를 관리할 때, 중복을 허용하지 않게 하려면? set
    • 블로그 포스팅의 태그
  • sadd : 원소 추가

  • Sets간 합집합 및 차집합 등 지원 (sinter)

  • 랜덤 원소 뽑기 (spop, srandmember)


4.2 예제

> sadd aset 1 2 3
(integer) 3 # 원소 크기 반환
> smembers aset
1. 3
2. 1
3. 2



5. Sorted Sets


  • Sets + score
    • score가 낮은 순서부터 높은 순서대로 정렬
  • Sets과 동일하게 원소 값의 중복은 불가, But, score는 중복 가능

5.1 특징

  • zadd : score와 원소값 추가
  • zrank, zrange : 조회
  • Redis에 데이터의 index를 저장하기 위해 자주 사용된다.

5.2 예제

# zadd <name> <score> <element>
> zadd sset 40 "D"
(integer) 1
> zadd sset 57 "G"
(integer) 1
> zadd sset 53 "F"
(integer) 1
> zadd sset 49 "E"
(integer) 1
> zadd sset 65 "H"
(integer) 1
> zadd sset 14 "B"
(integer) 1
> zadd sset 16 "C"
(integer) 1
> zadd sset 69 "I"
(integer) 1
> zadd sset 12 "A"
(integer) 1

> zrange 0 -1 # score를 통해서 검색 처음(0)부터 끝까지(-1)

1) "A"
2) "B"
3) "C"
4) "D"
5) "E"
6) "F"
7) "G"
8) "H"
9) "I"



6. Hashes


  • key - value(key - value)로 구성

  • 예제를 통해 빠르게 익혀보자.

    # > hmset <key> <hash key> <hash value> <hash key> <hash value> ...
    > hmset user:1000 username jinmin year 1995 verified 1
    OK
    # > hget <key> <hash key>
    > hget user:1000 username
    "jinmin"
    > hget user:1000 year
    "1995"
    > hgettall user:1000
    1) "username"
    2) "jinmin"
    3) "year"
    4) "1995"
    5) "verified"
    6) "1"
  • 참고 사이트 : 사바라다는 차곡차곡 님의 블로그

profile
열심히 해보자9999

0개의 댓글