[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] CROSSSLOT Keys in request don't hash to the same slot
·
DataBase/Error
환경 Redis Master 3대 + Slave 3대 클러스터 모드 문제 상황 특정 클러스터 노드에 multi key 명령어 사용시 에러 발생 DEL id:1 id:2 id:3 id:4 id:5 특정 노드에서 id:1 ~ id:5 에 해당하는 슬롯을 가지고 있다 하더라도 '슬롯'까지 같아야만함. 해결책 tag 사용 key에 {} 로 태그를 지정하면 특정 슬롯에 저장됨을 보장할 수 있다. group by slot slot 별로 키를 담아서 해당 슬롯을 가지고있는 노드로부터 multi key 연산을 실행한다. tistory 테마 적용이 깨짐에 따라 medium 에 글을 기고했다. https://medium.com/@mbh023/redis-multi-key-command-in-cluster-mode-feat-..
[Database] H2 연결 옵션
·
DataBase
🎯 GoalsSpringBoot - H2 DB 간 적절한 연결 방법을 선택할 줄 안다.SpringBoot - H2 DB Automatic mixed 연결을 직접 실행해본다. H2 DB 연결 3가지 모드1. Embedded Mode이름 그대로 JVM App 내에 DB를 '내장'하는 모드다.네트워크 IO가 없기 때문에 가장 빠른 대신 외부 클라이언트로 접근이 불가능하다는 단점이 있다. (심지어 로컬 호스트 내의 다른 앱이라도 불가하다.) 2. Server - Client ModeH2 DB 공식문서에서 추천하는 방식으로 외부에서 접근이 가능하다.대신, TCP/IP 네트워크 IO 로 데이터 통신이 이뤄지기 때문에 Latency 발생이 불가피하다.  It's recommended to use the client..
[MongoDB] Drop DB on MongoDB with test
·
DataBase/NoSQL
문제 상황 mocha + typescript + node.js + mongoDB (contianer) 환경 테스트 코드 작성 파일 단위로 테스트 완료 후 DB clean-up 을 DB Drop 하는 함수로 감싼다. DB 초기화 함수 import {MongoClient} from 'mongodb' const DEFAULT_MONGO_DB_NAMES = ['admin', 'config', 'local']; export async function initDB() : Promise { const dbClient = new MongoClient(config); await dbClient.connect(); const res = await dbClient.db().admin().listDatabases(); con..