์บ์ ์์คํ
์ผ๋ก์ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตIn-Memory
ย ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธย Redis
๋ฅผ ์ด์ฉํ๊ณ ๋ ๋์ค์์ ์ ๊ณตํ๋ย Sorted-Set
์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋น ๋ฅด๊ณ ๊ฐ๋จํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ ๊ฐ๋ฅ๐๊ณตํต์
1. 1ms์ดํ์ ์๋ต๋๊ธฐ์๊ฐ
2. ๊ฐ๋ฐ์ ์ฉ์ด์ฑ
3. ๋ฐ์ดํฐ ํ์ด์ ๋
4. ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ง์
๐Redis๋ง์ ํน์ง
1. ๋์ฑ ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ
2. Snapshots
3. ๋ณต์
4. ํธ๋์ ์
5. Pub / Sub messaging
6. ๋ฃจ์ ์คํฌ๋ฆฝํธ ์ง์
7. ์์น๊ธฐ๋ฐ ๋ฐ์ดํฐ ํ์ ์ง์
[ํ์ํ ๋ชจ๋]
yarn add cache-manager
yarn add redis
yarn add cache-manager-redis-store
//docker-compose.yamlํ์ผ์ redis ์ถ๊ฐ
version: '3.7'
services:
my-backend:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./src:/myfolder/src
ports:
- 3000:3000
my-database:
image: mysql:latest
environment:
MYSQL_DATABASE: 'mainproject'
MYSQL_ROOT_PASSWORD: 'root'
ports:
- 3306:3306
my-redis:
image: redis:latest
ports:
- 6379:6379
// app.module.ts์ redis๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ฝ๋ ์ถ๊ฐ
import { CacheModule, Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from './apis/auth/auth.module';
import { BoardModule } from './apis/board/board.module';
import { PointTransactionModule } from './apis/pointTransaction/pointTransaction.module';
import { ProductModule } from './apis/product/product.module';
import { ProductCategoryModule } from './apis/productCategory/productCategory.module';
import { FileModule } from './apis/file/file.module';
import { UserModule } from './apis/user/user.module';
import type { RedisClientOptions } from 'redis';
import * as redisStore from 'cache-manager-redis-store';
@Module({
imports: [
AuthModule,
BoardModule,
FileModule,
PointTransactionModule,
ProductModule,
ProductCategoryModule,
UserModule,
TypeOrmModule.forRoot({
type: 'mysql',
host: 'my_database',
port: 3306,
username: 'root',
password: 'root',
database: 'myproject',
entities: [__dirname + '/apis/**/*.entity.*'],
synchronize: true,
logging: true,
}),
GraphQLModule.forRoot({
autoSchemaFile: 'src/common/graphql/schema.gql',
context: ({ req, res }) => ({ req, res }),
}),
CacheModule.register<RedisClientOptions>({
store: redisStore,
url: 'redis://my_redis:6379',
isGlobal: true,
}),
],
})
export class AppModule {}
๐กdocker์คํํ ํฐ๋ฏธ๋์ด ์๋ ๋ค๋ฅธ ํฐ๋ฏธ๋์์ redis์ ์คํ๋๋์ง ํ์ธ
- docker ps
- docker exec -it (redis - containerID) redis-cil --raw
-> redis ์ ์- keys *
-> redis์ ์ ์ฅ๋ ๋ชจ๋ key ์ถ๋ ฅ- set [key][value]
-> ๋ฐ์ดํฐ ์ ์ฅ- get [key]
-> key์ ํด๋นํ๋ ๋ฐ์ดํฐ ์กฐํ- exists [key]
-> key๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ ํ์ธ- flushall
-> ํ์ฌ ์ ์ฅ๋์ด์๋ ๋ชจ๋ key ์ญ์ - ttl [key]
-> ํ์ฌ ๋จ์ ์๊ฐ ํ์ธ