String
, List
, Hash
, Set
, SortedSet
과 같은 다양한 데이터형을 지원💡 NoSQL (Not Only SQL, 비관계형 데이터베이스)
많은 양의 데이터를 효율적으로 처리해야 할 때, 데이터의 분산처리, 빠른 쓰기 및 데이터의 안정성이 필요할 때 사용한다. 특정 서버에 장애가 발생했을 때에도 데이터 유실이나 서비스 중지가 없는 형태의 구조이기 때문에, NoSQL을 사용한다.
NoSQL에서는 테이블(Table)을 컬렉션(Collection)으로, 레코드(Record)를 문서(Document)로 부른다. SQL에서는 정해진 스키마를 따르지 않는다면 데이터를 추가 할 수 없었지만, NoSQL에서는 다른 구조의 데이터를 같은 컬렉션(=SQL에서의 table)에 추가할 수 있다.
*.rdb
파일로 저장해 스냅샷(기억장치) 기능을 제공한다. (해당 시점으로 복구 가능)💡 Redis Replication(데이터 복제) 설정 과정
- Secondary에
replicaof
명령을 전달- Secondary는 Primary에 sync 명령 전달
- Primary는 현재 메모리 상태를 저장하기 위해 Fork
- Fork한 프로세서는 현재 메모리 정보를 disk에 dump
- 해당 정보를 Secondary에 전달
- Fork 이후의 데이터를 Secondary에 계속 전달
scan
명령으로 KEYS
와같이 긴 명령을 짧은 여러번의 명령으로 대체 가능KEYS
와 같은 특정 command disable설치
$ docker pull redis
시작하기
$ docker run --name some-redis -d -p 6379:6379 redis
기본 포트인 6379에서 실행
$ npm i --save redis
redis-module.ts
import { CacheModule, Global, Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { RedisCacheService } from './redis-cache.service';
import * as redisStore from 'cache-manager-redis-store';
@Global()
@Module({
imports: [
CacheModule.registerAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => {
return {
store: redisStore,
host: configService.get('REDIS_HOST'),
port: Number(configService.get('REDIS_PORT')),
ttl: Number(configService.get('CACHE_TTL')),
password: configService.get('REDIS_PASSWORD'),
};
},
}),
],
providers: [RedisCacheService],
exports: [RedisCacheService],
})
export class RedisCacheModule {}
module
에 config 설정RedisCacheService
app.module.ts
에서 RedisCacheModule
importsredis-service.ts
import { CACHE_MANAGER, Inject, Injectable } from '@nestjs/common';
import { Cache } from 'cache-manager';
@Injectable()
export class RedisCacheService {
constructor(@Inject(CACHE_MANAGER) private readonly cache: Cache) {}
async get(key) {
return await this.cache.get(key);
}
async set(key, value) {
await this.cache.set(key, value);
}
}
RedisCacheService
에서 get
, set
사용