Redis 시작하기 with Node

Jiwon Yang·2020년 10월 24일
0
post-thumbnail

1. Redis 는 무엇인가?

Redis : Remote Dictionary Server

1) 왜 사용해야 하는가?

  • 자주 사용되는 데이터를 Redis 를 사용하여 캐시로 저장해둔다면, 속도 향상에 도움이 될 것이다.
    - 주의할 점 : 영속적인 데이터를 저장하는 일반 데이터베이스와 달리, 휘발성이 강한 데이터나 세션 등을 저장하는 것이 적절하다.
  • pub/sub 형태에 유리하기 때문에 메시지를 전달하는 큐로서의 역할도 가능하다.

2) Redis 의 특징

  • In-Memory 데이터베이스이다.
    - Redis : 메모리에 데이터 저장 (속도가 더 빠르다 🔥)
    - 기존 관계형 데이터베이스 (ex. MySQL, Oracle) : 디스크에 데이터 저장

  • NoSQL 이다.
    - Redis : 다양한 자료구조 를 지원한다.

    • 기존 In-Momory 데이터베이스 (ex. Memcached) : 문자열만 지원하는 경우가 많다.
  • 싱글쓰레드이다.
    - atomic하다. : 모든 쓰레드가 데이터에 접근할 때, 순서가 잘 지켜진다.

2. Redis 자료 구조

String

  • 문자열
  • text, integer, binary file 등도 지원

Set

  • string의 집합

Sorted Set

  • set에 score 필드(일종의 가중치)가 추가된 형태

Hash

List

  • 일종의 양방향 linked list
  • pub-sub 패턴에 유리하다.
    - pub-sub 패턴 (publisher - subscriber) : 하나의 채널을 여러 개의 서버(or 프로그램)을 구독한다. 즉, publisher 와 subscriber은 일대다의 관계이다. 하나의 서버에서 이벤트를 발생시키면, 이를 구독한 서버들이 그 내용을 알아챌 수 있다. 서버의 동기화가 가능해진다.
    • Redis 에서의 적용 : A, B, C 서버(subscriber)가 공용 스토리지를 사용하면서, Redis 서버(publisher)와 연결되어 구독 중이다. A 서버가 Redis에 데이터를 업데이트하면, 나머지 서버가 이를 알아챌 수 있다.

3. Node 에서 구현하기

Redis & Node
Redis 는 캐시로 많이 사용될 뿐만 아니라, 노드클러스터링을 사용할 때, 인스턴스 간에 상태정보를 공유하는 식으로 활용할 수도 있다.

1) Redis Server 설치하기

  • for Mac
brew install redis

2) Redis Server 구동하기

  • 서버 구동
redis-server

  • 서버 구동되었는지 확인
redis-cli ping
// 정상 구동된 경우 PONG 리턴됨

3) Redis 패키지 설치

npm i redis
  • express 모듈
npm i express

4) 코드 작성하기

const express = require('express')
const redis = require('redis')

// 1. app 생성 및 설정
const app = express()
const port = 3000

// 2. redis client 생성 & listen 에러
const client = redis.createClient(6379, '127.0.0.1')
client.on('error', (err) => {
    console.log('Error ' + err)
})

// 3. redis 에 number : 10 저장
client.set('number', 10)

// 4. GET '/' 요청이 들어오는 경우, console에 number 의 value (=10) 로깅
app.get('/', (req, res) => {
    client.get('number', (err, value) => {
        if (err) throw err
        console.log(value)
    })
    res.send('Hello World')
})

// 5. app listen
app.listen(port, () => {
    console.log(`Example app listening at http://localhost:${port}`)
})

참고

profile
안녕하세요 양지원입니다

1개의 댓글

comment-user-thumbnail
2021년 9월 27일

답글 달기