본문 바로가기
  • Anyone can be anything!
wiki/아키텍쳐

What is Redis?

by Even better :) 2020. 5. 11.

Redis

  • In-Memory Data Structure Store
  • Open Source(BSD 3 License)
  • Support Data Structures
    • String, Set, Sorted-Set, Hashes, List
    • HyperLogLog, Bitmap, Geospatial Index
    • Stream

Cache is

결과를 저장해 두었다가 Data를 제공하는 서비스

Look aside cache

Client가 Database에서 Data를 읽기 전 Cache를 먼저 조회하여 Data가 있으면 읽어 오는 것을 Look aside cache라고 하며 Spring Cache 등에서 사용하는
Architecture 입니다. 읽는 속도가 중요한 서비스에서 이용하면 좋을 것 같습니다.

Write Back

Client가 Database에 쓰기 전에 Cash에 적재해 두었다가 한번에 Batch Insert 할때 사용하면 좋은 Architecture입니다. Log 등 모아 두었다가 Insert 하거나
Cache가 장애가 나도 다시 복구 할 수 있는 Data를 처리 할 때 사용하면 좋을 것 같습니다.

Race Condition

공유 자원에 대해 여러 개의 프로세스가 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말합니다.
동시에 접근할 때 자료의 일관성을 해치는 결과가 나타날 수 있습니다. 그래서 Redis에서는 Distributed locking{:target="_blank"}을 제공하고 있습니다.

Redis use case

  1. Session Cache
  2. Ranking Board
  3. Queues
  4. Look aside cache
  5. Pub/Sub

Redis Collections

String

  • 단일 Key
    • set <key> <value>
    • get <key>
  • 멀티 Key
    • mset <key1> <value1> <key2> <value2> <keyN> <valueN>
    • mget <key1> <key2> <keyN>

List

  • insert
    • Lpush <key> <value>
    • Rpush <key> <value>
  • pop
    • Lpop <key>
    • BLpop <key>
    • Rpop <key>
    • BRpop <key>

Set

  • SADD <key> <value>
    • <value>가 있으면 추가 되지 않음
  • SMEMBERS <key>
    • 모든 <value>를 리턴
  • SISMEMBER <key> <value>
    • <value>가 있으면 1, 없으면 0Sorted Set
  • ZADD <key> <score> <value>
    • <value>가 있으면 해당 <value>로 변경
  • ZRANGE <key> <startindex> <endindex>
    • index 범위의 값을 리턴Hash

Redis manage

Memory manage

  • physical memory 이상 사용하지 않게 모니터링
  • maxmemory 설정해도 그 이상 사용하게 될 수 있음
  • RSS 모니터링
  • swap을 사용하는 memory를 접근할 경우 느림
  • 하나의 instance memory를 사용하는 것보다 적은 용량의 여러개 instance를 사용하는 것이 안전함
  • 용량이 부족할때
    • Memory를 70% 이상 사용할 경우 장비 Scale up
    • 데이터 정리 하기
    • ziplist
      • collection은 memory를 많이 사용함
        • Hash + HashTable
        • Sorted Set + Skiplist + HashTable
        • Set + HashTable

O(N)

  • Redis는 Single Threaded이므로 한번에 하나의 명령어만 실행
  • 전체 데이터를 리턴하는 명령어는 사용을 자제해야 함
    • KEYS
      • Scan 명령어로 대체 가능
    • FLUSHALL, FLUSHDB
    • Delete Collection
    • Get All Collection

Replication

  • Replication 실행 시 fork가 발생하므로 메모리 부족현상이 발생할수 있음
  • Redis-cli --rdb 명령은 현재상태 메모리 스냅샷 메모리 부족현상이 발생할수 있음

Redis Cluster

  • Slot 16384
  • Hash 알고리즘 crc16

장점

  • 자체적인 primary, Secondary Failover
  • Slot 단위 데이터 관리

단점

  • 메모리 사용량 많음
  • migration 시점은 관리자가 결정

Redis Failover

  • Coordinator 기반 Failover
  • VIP/DNS 기반 Failover
  • Redis Cluster의 사용

Monitoring Factor

Redis info

  • Rss
  • Use Memory
  • Connection 수
  • 초당 처리 요청 수System
  • CPU
  • Disk
  • Netword rx/tx

참고 자료

우아한레디스

댓글