Redis, Express setting

HeumHeum2·2020년 10월 14일
0

RadisNoSQL 데이터 베이스 중 하나로 In-memory라는 특징이 있다.

메모리 스토어는 서버를 재시작 하는 순간 모두 날아간다. 그렇기에 우리는 데이터베이스를 사용한다. 다만, 데이터베이스는 접근 및 커넥션을 유지하는데 비용이 많이 든다. 심지어 간단한 데이터를 데이터베이스에 저장하기에 비용이 많이 들고, 속도도 느리기에 나온 것이 Radis이다.

데이터베이스라 데이터가 어느 정도 유지가 되면서 데이터를 불러올 때 메모리에 로드하기 때문에 접근 속도가 매우 빠르다.

또한, Pub/Sub 서버로도 많이 사용하며, 알림 같은 것을 미리 받도록 신청하고 알림 상황이 발생하면 구독 했던 클라이언트들에게 알림을 전달하는 것으로 유용하다.

단점으로는 데이터가 항상 정확하게 유지됨을 보장하지 않음. 그렇기에 유지되면 좋지만 날아가도 서비스에 크게 문제 없는 데이터를 저장하는게 베스트이다.

설치 방법

express에서 사용하기에 아래와 같이 설치 및 설정한다.

npm i redis express-session connect-redis;

app.js

import session from 'express-session';
import connectRedis from 'connect-redis';
import redis from 'redis';
import express from 'express';

const client = redis.createClient(); // {port, url, hostname}, 기본포트 6379
const RedisStore = connectRedis(session);

const app = express();

app.use( session({...store: new RedisStore({client: client, logError: true}) );

express-session의 store 옵션에 RedisStore가 있으므로, 세션에 데이터가 저장될때 rediskey-value로 저장된다.

시작하기에 앞서 우선 redis가 설치 되어있어야하며, mac에서는 home brew로 설치 할 수 있다.

$brew install redis

설치가 완료되면 redis-server로 실행이 된다.

실행시키면 아래에 도시락 같은 그림이 보일 것이다.

그 다음으로 redis-cli를 실행시켜보자.

127.0.0.1:6379>

위에 처럼 커맨드 창이 나온다. 만약 다른 port로 접속한다면 redis-cli -p 3333로 설정 할 수 있다.

외부 서버에 접속하기 위해서는 redis.conf 파일을 변경 해야하며, redis 접속 시 비밀번호 설정도 할 수 있다.

redis.conf파일에 있는 requirepass를 찾아 foobared라고 되어있는 곳에 비밀번호를 입력하면 비밀번호 설정이 되며, bind를 찾아 127.0.0.1로 되어있는 부분을 지우고 0.0.0.0으로 수정한 뒤 redis.conf파일을 저장 후 redis를 재 시작 해주면 끝이다.

redis-cli 명령어

커맨드 창에서 key들의 목록을 보려면 아래와 같이 작성하면 된다.

keys *

key-value를 보기 위해선 아래와 같이 작성하면 된다.

get key

key-value를 하나하나 삭제할 때 사용한다. get과 비슷하다.

del key

key-value 모두 삭제할 때는 아래와 같다.

127.0.0.1:6000> flushall
OK
(1.18s)
127.0.0.1:6000> flushall async
OK

or

127.0.0.1:6000> flushdb
OK
(1.18s)
127.0.0.1:6000> flushdb async
OK

둘다 비동기로 처리했을 때 걸리는 시간은 1ms미만으로 걸린다고 한다.

자료구조

String

key-value으로 되어있는 문자열 자료구조이다. set으로 설정하고 get으로 가져온다. 세션과 동일하다.

client.set('name', 'heumheum2');
client.get('name', (err, reply) => {
  console.log(reply); // heumheum2
});

Hash

key-hash로 되어있는 구조. hmset으로 설정하고 hgetall로 가져온다.

client.hmset('class', 'name', 'heumheum2', 'age', 26);
client.hgetall('class', (err, obj) => {
  console.log(obj); // {name: 'heumheum2', age: 24}
});

Set

키 - 셋으로 되어있는 구조. 배열과 비슷하지만 중복을 허용하지 않음.

client.sadd('phone', 'iphone', 'galaxy', 'iphone');
client.smembers('phone', (err, set) => {
  console.log(set); // ['iphone', 'galaxy']
});

중복되는 값은 무시되는 것을 볼 수 있음.

Sorted set

키 - 정렬 셋으로 되어있는 구조. set이지만 순서를 정렬 할 수 있음. 오름차순이 기본값이며 내림차순으로 정렬하고 싶다면 zrevrange를 이용하면 된다.

client.zadd('height', 181, 'heumheum2', 170, 'hello', 168, 'world');
client.zrange('height', 0, -1, (err, sset) => {
  console.log(sset); // ['world', 'hello', 'heumheum2']
});

기타 명령어

삭제

client.del('name');

존재 확인

client.exists('name'); // 있으면 1 없으면 0

키 이름 변경

client.rename('name', 'title');

참고

https://mygumi.tistory.com/91

http://redisgate.kr/redis/server/flushdb.php

profile
커피가 본체인 개발자 ☕️

0개의 댓글