Node.js 및 Redis OM과 함께 Redis를 데이터베이스로 사용하는 방법
19446 단어 tutorialwebdevnodejavascript
소개
Redis는 더 빠른 응답뿐만 아니라 데이터베이스에 대한 부담을 덜어주기 때문에 데이터베이스에 저장된 데이터를 캐싱하는 것으로 널리 알려져 있습니다. 작업 대기열 등의 시스템을 만드는 데 사용되는 것과 같습니다.
그러나 그 기능은 거기서 멈추지 않습니다. Redis는 사용할 수 있는 많은 모듈을 제공하며 그 중 하나는 Redis에서 JSON 지원을 제공하는 RedisJSON으로, 애플리케이션의 기본 데이터베이스로 사용을 향상시킵니다.
그리고 제목과 이 서문에 적힌 내용에서 알 수 있듯 오늘은 간단한 crud로 api를 생성해 보지만 이번에는 Redis를 데이터베이스로 사용하겠습니다.
시작하기
시작하려면 새 프로젝트를 생성해 보겠습니다.
mkdir redis-node-crud
cd redis-node-crud
폴더 안에 노드 환경을 만듭니다.
npm init -y
다음으로 필요한 종속성을 설치합니다.
npm install koa @koa/router koa-body redis-om --save
npm install nodemon standard --save-dev
그런 다음
package.json
에 다음 스크립트를 추가합니다.{
"type": "module",
"scripts": {
"dev": "nodemon src/main.js",
"lint": "standard --fix"
},
}
프로젝트 설정이 완료되면 Redis 인스턴스에 대한 연결을 구성할 수 있습니다.
// @/src/db.js
import { Client } from 'redis-om'
export const client = new Client()
export const createClient = async () => {
if (!client.isOpen()) {
await client.open('redis://localhost:6379')
}
}
다음 단계는 API의 entity 및 schema을 생성하는 것입니다(더 간단하게 하기 위해 데이터베이스 구성과 동일한 파일에 넣었습니다).
// @/src/db.js
import { Client, Entity, Schema } from 'redis-om'
export const client = new Client()
export const createClient = async () => {
if (!client.isOpen()) {
await client.open('redis://localhost:6379')
}
}
class Post extends Entity {}
export const postSchema = new Schema(Post, {
title: { type: 'string' },
content: { type: 'string' },
isPublished: { type: 'boolean' }
})
Redis에 대한 연결 구성이 완료되고 스키마가 정의되었으므로 이제 CRUD를 수행할 api 라우터에서 작업을 시작할 수 있습니다. 이를 통해 이제 필요한 종속성과 모듈을 가져올 수 있습니다.
// @/src/routes.js
import Router from '@koa/router'
import { client, postSchema } from './db.js'
const router = new Router()
// ...
export { router }
생성할 첫 번째 경로는 데이터베이스에 저장한 모든 데이터를 반환합니다.
router.get('/posts', async (ctx) => {
const postRepository = client.fetchRepository(postSchema)
await postRepository.createIndex()
const allPosts = await postRepository.search().returnAll()
ctx.body = allPosts
})
그리고 항상 모든 게시물을 받고 싶지는 않으므로 요청 매개변수에 제공된
id
매개변수에 따라 하나의 게시물만 반환하는 경로를 생성해 보겠습니다.router.get('/posts/:id', async (ctx) => {
const postRepository = client.fetchRepository(postSchema)
const post = await postRepository.fetch(ctx.params.id)
ctx.body = post
})
데이터를 반환하는 것 외에도 스키마에서 지정하는 속성을 추가할 수 있는 경로를 생성하기 위해 일부를 삽입해야 합니다.
router.post('/post', async (ctx) => {
const postRepository = client.fetchRepository(postSchema)
const post = await postRepository.createAndSave({
...ctx.request.body
})
ctx.body = post
})
특정 게시물의 속성 중 하나를 업데이트해야 하는 경우 매개 변수에서 게시물의
id
를 보내고 요청 본문에서 업데이트하려는 속성을 보낼 경로를 만듭니다. :router.put('/post/:id', async (ctx) => {
const postRepository = client.fetchRepository(postSchema)
const post = await postRepository.fetch(ctx.params.id)
Object.entries(ctx.request.body).forEach(([key, val]) => {
post[key] = val
})
const postId = await postRepository.save(post)
ctx.body = { postId, post }
})
마지막으로 데이터베이스에서 데이터를 삭제해야 합니다. 특정 게시물만 삭제하기 위해 요청 매개변수에서
id
매개변수를 허용하는 경로를 생성할 것이기 때문입니다.
router.delete('/post/:id', async (ctx) => {
const postId = ctx.params.id
const postRepository = client.fetchRepository(postSchema)
await postRepository.remove(postId)
ctx.body = { postId }
})
CRUD가 완료되면 이제 경로를 설정하고 데이터베이스와의 연결을 설정할 api 항목 파일을 만들 수 있습니다.
// @/src/main.js
import Koa from 'koa'
import koaBody from 'koa-body'
import { router } from './routes.js'
import { createClient, client } from './db.js'
const startServer = async () => {
const app = new Koa()
await createClient()
app.use(koaBody())
app.use(router.routes())
return app
}
startServer()
.then(async (app) => {
await new Promise(resolve => app.listen({ port: 3333 }, resolve))
})
.catch(async (err) => {
console.error(err)
await client.close()
process.exit(1)
})
실행 방법
API 프로세스를 시작하려면 다음 명령을 실행합니다.
npm run dev
코드 형식을 수정하려면 다음 명령을 실행합니다.
npm run lint
결론
늘 그렇듯이 기사가 마음에 드셨기를 바라며 기존 프로젝트에 도움이 되었거나 단순히 사용해 보고 싶으셨기를 바랍니다.
기사에서 잘못된 부분을 발견했다면 댓글로 알려주시면 수정하겠습니다. 마치기 전에 이 기사의 소스 코드에 액세스하려면 github 저장소에 대한 링크here를 남겨둡니다.
Reference
이 문제에 관하여(Node.js 및 Redis OM과 함께 Redis를 데이터베이스로 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/franciscomendes10866/how-to-use-redis-as-a-database-using-nodejs-25ao텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)