레디스를 이용하다보면 NX와 XX 명령어가 있다. set a b 명령어를 입력한다고 할 때, NX는 키가 존재하지 않을 때 set 하고, XX는 키가 존재할 때 set 한다. 근데 이게 무슨 줄임말인지 짧은 영어 지식으론 몰라서 찾아보니, NX는 Not eXist, XX는 그냥 eXist 인데 길이 맞추려고 한 것 같다.. 공식 문서에서도 무엇의 준말인지 안 알려주고 아래와 같이 나와있다. NX -- Only set the key if it does not already exist.XX -- Only set the key if it already exists. https://redis.io/docs/latest/commands/set/ SETSets the string value of a key, ..
redis
복제 가용성은 일정 기간 동안 서비스를 정상적으로 사용할 수 있는 시간의 비율을 뜻한다. 레디스에서 고가용성을 확보하기 위해서는 아래의 두 가지 기능이 필요하다. 복제 : 마스터 노드의 데이터를 복제본 노드로 실시간 복사하는 기능이다. 마스터 노드의 서버에 장애가 생겨 데이터가 유실되어도 복제본 노드에서 데이터를 확인할 수 있다. 자동 페일오버 : 마스터 노드에서 발생한 장애를 감지해 레디스로 들어오는 클라이언트 연결을 자동으로 복제본 노드로 리디렉션하는 기능이다. 이를 통해 자동으로 엔드포인트를 변경하여 빠른 장애 조치가 가능하다. 레디스에서의 복제 구조 서비스에서 복제본 노드를 추가하는 이유는 다음과 같다. 애플리케이션을 실행하는 하드웨어는 언제든지 고장날 수 있기 때문에, 마스터 DB가 다운됐을 때..
캐시란? 데이터의 원본보다 더 빠르고 효율적으로 접근할 수 있는 임시 데이터 저장소. 아래의 조건을 만족시킨다면 캐시를 도입했을 때 성능을 효과적으로 개선할 수 있다. 원본 DB에서 원하는 데이터를 찾기 위해 검색하는 시간이 오래 걸리거나, 매번 계산을 통해 가져온다. 캐시에서 데이터를 가져오는 것이 원본 DB의 데이터를 요청하는 것보다 빠르다. 캐시에 저장된 데이터는 잘 변하지 않는다. 캐시에 저장된 데이터는 자주 검색되는 데이터다. 캐시로서의 레디스 사용이 간단하다. 단순 키-값 형태로 저장하고, 다양한 자료 구조를 제공한다. 인메모리 데이터 저장소여서 데이터 접근 시간이 빠르다. 평균 읽기 및 쓰기 작업 속도가 1ms 미만이다. 자체적으로 고가용성 기능인 센티널 또는 클러스터를 제공한다. 캐싱 전략..
@Configuration public class RedisConfig { @Value("${spring.data.redis.host}") private String host; @Value("${spring.data.redis.port}") private Integer port; @Bean public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(host, port); } @Bean public RedisTemplate redisTemplate() { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFact..
메모리 계층구조 메모리 계층구조를 보면, 위로 갈수록 빠르지만 비싸고, 밑으로 내려갈수록 느리지만 저렴해지는 특징이 있다. 지금 제가 쓰는 맥북은 12MB의 Cache Memory에 16GB의 DRAM, 256GB의 SSD를 사용하고 있다. 12MB의 캐쉬메모리는 매우 빠르지만 용량이 너무 작아 DB로 쓰기에는 무리가 있다. 그리고 256GB의 SSD는 용량이 크고, 비휘발성이라 컴퓨터가 꺼져도 데이터를 잃지 않기 때문에 일반적인 DB에 사용이 된다. 하지만 SSD는 위 계층들보다 느려서 요청이 많으면 매번 디스크에 접근하여 부하가 걸려 느려질 수 있다는 문제가 있다. 그래서 적당히 빠르면서도 적당히 비싸며, 용량도 DB로 쓰기에 적당한 메인 메모리(DRAM)를 사용하는 데이터베이스를 in-memory ..