[Redis] TTL - 어떤 방식으로 만료된 키를 제거할까?
·
DataBase/Redis
개요레디스는 키에 Time To Live (TTL) 이 지정된 경우 키가 만료(expired) 되면 해당 키를 제거한다.어떤 방식으로 만료된 키를 제거하는 것일까? 레디스는 2가지 방법을 제공한다.바로 Passive 방식과 Active 방식이다. Passive way클라이언트가 만료된 키에 접근하면, 그때야 비로소 해당 키를 제거한다.장점CPU 오베헤드가 발생하지 않는다.단점만료된 키에 클라이언트가 접근하지 않는다면?=> 만료된 키가 제거되지 않는다.=> 메모리 낭비 발생 Active way아래 과정을 1초에 대략 10회 진행한다.TTL 값이 있는 키 20개를 랜덤하게 뽑는다.뽑은 키 중 만료된 키만 제거한다.(2.)에서 25% 이상 키가 제거되었다면 (1.)로 돌아간다.(2.)에서 25% 미만 키가 제..
[Redis] TTL - 언제 업데이트 될까?
·
DataBase/Redis
개요Redis TTL 은 EXPIRE 명령어로 쉽게 설정할 수 있다.한 번 설정한 TTL이 '갱신'되거나 '유지'되는 케이스를 미리 알고 사용해야한다.이 글은 Redis Command 별 TTL이 언제 갱신 또는 유지되는지를 소개한다.  키에 매핑된 값 전체를 완전히 대치하는 연산만이 TTL을 갱신한다. ex)DEL값을 아예 '삭제' 해버린다.SET값을 새 값으로 아예 '대치' 해버린다.     키에 매핑된 기존 값에 연산을 하거나값을 추가하는 연산은 TTL을 유지한다. ex)INCR / DECR기존 값에 +-1LPUSH / LPOP기존 List에 원소 추가/제거SADD/SREM기존 Set에 원소 추가/제거HSET기존 property 를 변경RENAMEkey 이름을 변경 member2team 이라는 SE..
[Redis] DataStructure Lifecycle
·
DataBase/Redis
Collection type다음과 같이 여러 value 를 담을 수 있는 Data Typehashlistsetsortedset값 추가시 자동 생성된다.LPUSH, SADD 등과 같은 명령어 입력시 자동으로 key 가 생성된다.> EXISTS myset(integer) 0> SADD myset "A" "B"(integer) 2> EXISTS myset(integer) 1> SREM myset "A" "B"(integer) 2> EXISTS myset(integer) 0갖는 값이 0개가 되는 시점에 제거된다.LPOP, SREM 과 같은 명령어로 모든 원소를 제거하면해당 키는 알아서 제거된다.> SMEMBERS myset1) "A"2) "B"> SREM myset "A" "B"(integer) 2> EXIST..
[Redis] redis.conf 권장설정
·
DataBase/Redis
redis.conf양이 겁나게 많은데, 주요 권장설정을 알아보고 알맹이만 쏙 빼먹자.1. Maxclient 값을 충분히 높여라최대로 접속 가능한 클라이언트 값으로 이 값 넘어서의 새로운 클라이언트 연결 시도는 모두 거부된다.클러스터가 사용될 경우, 이 값이 공유된다.실제 서비스에서 사용한다면, 이 값을 충분히 높여라 (5만 이상 권장, Default: 10,000)2. RDB/AOF 설정을 비활성화하라.AOF : Append Only File 의 약자로 Default 값이 'no' 이기 때문에 따로 건드리지 않아도된다.RDB: 메인 메모리의 모든 데이터를 디스크에 dumpb 한다. *.rdb 파일이 생성된다.3. 부하가 상당한 커맨드를 비활성화하라.ex) Keys Command 는 O(N) 이므로 Dis..