레디스(redis)

레디스(redis)

개발 용이성

  • 자료구조가 atomic 하다.(race condition을 피할수 있다.)
  • collection을 제공 한다.

replication

  • primary 와 secondary 구조로 replication을 셋팅할수 있다.
  • DB의 statement replication(명령어로 동기화 되기 때문에 rua script를 사용하면 문제가 생길수도 있음)
  • replication

Redis cluster(sharding)

  • Hash 기반으로 Slot 16384 로 구분
  • Hash 알고리즘은 CRC16을 사용 Slot = crc16(key) % 16384
  • partitioning

Redis Failover

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

Redis sentinel

monitoring

redis info

  • RSS
  • Used Memory
  • Connection 수
  • 초당 처리 요청 수

System

  • CPU
  • Disk
  • Network rx/tx

monitoring tool

참고 사항

  • O(n) 명령어는 최대한 사용하지 않는다.()
  • KEYS * 명령어는 사용하지 말자(SCAN 명령어 사용)

Copy-on-Write

1
2
3
4
Linux(Unix)에서는 자식 프로세스(child process)를 생성(fork)하면 같은 메모리 공간을 공유하게 된다.
그런데 부모 프로세스가 데이터를 새로 넣거나, 수정하거나, 지우게 되면 같은 메모리 공간을 공유할 수 없게 된다.
이때 부모 프로세스는 해당 페이지를 복사한 다음 수정한다.
이것을 Copy-on-Write(COW)라고 한다.

latency

  • save parameter - redis.conf의 값(save 60 10000) 60초 동안 만개의 값이 변경되면 RDB 파일을 새로 만들어라
    비사용을 추천 대신 AOF를 everysec로 사용

  • bgsave commend - 자식 프로세스가 생성 되어 RDB 파일을 다시 생성 된다. save 명령어는 레디스 프로세스가 직점 생성해서 COW가 생기지 않는다.
    꼭 필요한 경우에만 서버 부하가 적을 때 사용

  • Replication - master 프로세스면 slave가 연결 되면 full resync가 발생되여 RDB 파일을 다시 생성한다.
    새 슬레이브 연결은 부하가 적은 때를 이용

  • auto-aof-rewrite-percentage parameter - redis.conf의 값 (auto-aof-rewrite-percentage 100) appendonly 파일이 100% 커지면 appendonly 파일을 다시 써라
    비사용을 추천

  • bgrewriteaof commend - 자식 프로세스가 생성 되어 appendonly 파일을 다시 쓴다.
    서버 부하가 적을 때 사용

  • COW 발생 확인 방법 - 로그를 확인한다.(RDB: 256 MB of memory used by copy-on-write, AOF rewrite: 256 MB of memory used by copy-on-write)

Docker로 설치

1
2
3
docker pull redis

docker run --name test-redis -d -p 6379:6379 redis redis-server --save "" --appendonly no
  • –save “” : 디폴트 값을 삭제 처리(save 60 10000)
  • –appendonly no : AOF 파일 저장 하지 않음

참고자료