🌼 Redis
⛔️ Redis란? 왜쓰는가.
오픈 소스로서 NoSQL로 분류되고, in-memory 솔루션으로 분류되기도 한다.
외부에서 사용 가능한 Key-Value 쌍의 해시 맵 형태의 서버라고 생각할 수 있다.
디스크에 데이터를 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 작업 속도가 상당히 빠르다.
싱글 스레드 방식이어서 연산을 하나씩 처리한다.
1️⃣ Cache
결과를 저장하고 나중에 똑같은 요청이오면, DB 또는 API를 참조하지 않고 요청을 처리한다.
파레토 법칙 - 80%의 결과는 20%의 원인으로 인해 발생
캐시는 모든 결과를 캐싱할 필요가 없고, 많이 사용되는 20%만 캐싱함으로써 전체적으로 효율올린다.
2️⃣ Look Aside Cache (Lazy Loading)
캐시에 데이터 존재 유무 확인
데이터가 있다면 캐시의 데이터 사용
데이터가 없다면 캐시의 실제 DB 데이터 사용
DB에서 가져 온 데이터를 캐시에 저장
3️⃣ Write Back
모든 데이터를 캐시에 저장
캐시의 데이터를 일정 주기마다 DB에 한꺼번에 저장 (배치)
DB에 저장한 데이터를 캐시에서 제거
DB에 요청이 몰리면 서버가 다운될 가능성이 있다. 그래서 모든 요청을 캐시에 데이터를 저장하고
저장한 캐쉬값을 일정 주기마다 DB에 Insert해주는 방식
- ☢️
주의사항
=> DB에 Insert되기전 Cache서버가 죽으면 데이터 유실이 될 수도 있다.
🐶 Redis 사용기
Redis를 로컬로 사용할 수 있고, Redis 클라우드를 사용하여 외부에서 접속할수 있다.
Redis 클라우드를 사용하여 호스팅 해주는 서비스를 쓰는 것이 협업할때 편리하다.
Redis 클라우드 등록하기!
const redisClient = redis.createClient({
url: `redis://${process.env.REDIS_USERNAME}:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/0`,
legacyMode: true,
});
redisClient.on('connect', () => {
console.info('🟢 Redis 연결 성공!');
});
redisClient.on('error', (err) => {
console.error('Redis Client Error', err);
});
redisClient.connect().then();
exports.redisCli = redisClient;
Mysql Workerbench 처럼 Redis Desktop Manage를 이용하여 눈으로 관리할 수 있게 사용하고 있다.
Redis 문법은redisCli, redisCli.v4 있다.
Redis 개념잡기(참조)