Redis 시작하기

노드에서 Redis 기반의 캐싱을 해보고 싶어서 기본적으로 노드 환경에서 Redis에 연결하고, 데이터를 써보고 읽는 것부터 해보기로 했다.

우선 Redis의 데이터 타입에는 Strings, Lists, Sets, Hashes가 있다. 각각 읽거나 쓰는 방법이 다르지만 정말 간단하다.

Redis 환경 구축하기

Windows는 공식적으로 지원하지 않는다고 한다. Microsoft에서 관리하는 윈도우용 redis가 있지만 깔끔한 환경을 바로 세팅하기 위해서 Docker 기반의 Redis를 사용하기로 했다.

먼저 호스트 PC에서 Docker Terminal를 실행한다.

1
docker run --name redis-db -d -p 6379:6379 redis

이제 redis 이미지를 pull하고 컨테이너로 실행한다. docker ps로 실행된 것을 확인해보자.

이제 컨테이너에 접속한다.

1
docker exec -it redis-db /bin/bash

redis 컨테이너로 접속했다. 이제 터미널에 redis-cli를 입력하면 redis를 사용할 수 있다.

Node.js와 Redis 연동하기

먼저 Redis npm을 먼저 설치한다.

1
yarn add redis # npm install redis

이제 js 파일을 작성해보자.

1
2
3
4
5
6
7
8
9
10
const redis = require("redis");
const client = redis.createClient();

client.on("error", (err) => {
console.error(err);
});

client.on("ready", () => {
console.log("Redis is ready");
});

connection to 127.0.0.1:6379 failed - connect ECONNREFUSED

사실 여기서 애를 많이 먹었다. 호스트의 Docker로 실행한 컨테이너의 IP로 접속을 못 하는 것 같았는데, 알고보니 Docker Machine의 IP로 접속해야 했다. 일반적인 접속 방법은 위와 같지만 호스트 환경의 도커에서 실습하는 경우 IP를 직접 설정해줘야 한다.

1
2
const redisHost = "192.168.99.100";
const client = redis.createClient(6379, redisHost);

이제 잘 접속된다.

Redis에 값 쓰고 불러오기

client에 redis의 클라이언트를 정의해놨으므로 이제 client에서 redis 명령어를 그대로 사용할 수 있다.

1
2
3
4
fruit {
lemon: 5000,
green: 2000,
}

이 Hash 값을 redis에 저장해보자. Redis에서 Hash를 저장하는 명령어인 hmset을 그대로 사용한다.

1
2
3
4
client.hmset("fruit", {
lemon: 5000,
green: 2000,
});

이제 이 값을 가져와보자. Hash 데이터의 전체 값을 가져올 수 있는 hgetall 명령어를 사용하면 된다.

1
2
3
client.hgetall("fruit", (err, res) => {
console.log(res);
});

실행하면, 값이 잘 출력된다.

명령어마다 어떤 콜백이 나오는지 모르면 npmjs 공식 문서가 잘 되어 있으니, 참조하면 된다.

(정말) 간단하게 Redis를 Node에서 다뤄봤는데, 이제 세션 스토어나 캐싱을 해볼 생각이다.