dh_0e

[DB] Redis 사용법 본문

DB/Redis

[DB] Redis 사용법

dh_0e 2024. 6. 19. 23:21

Redis란?

  • Remote Dictionary Server의 약자로 Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반 비관계형 데이터베이스(NoSQL) 관리 시스템
  • In-memory 기반의 데이터 처리 및 저장을 제공하여 속도가 빠르지만 서버가 꺼지면 저장된 모든 데이터가 사라짐
  • 보편적으로 데이터의 휘발성 때문에 메인 데이터베이스보다는 보조 데이터베이스로 사용함
  • 데이터에 만료 시간을 지정하여 만료 시간이 지나면 해당 데이터를 삭제하며, 메모리가 꽉 찼을 때도 LRU(Least Recently Used) 알고리즘에 의해 데이터가 사라짐

 

Redis 명령어

  • 아래 명령어를 통해 Key-Value 구조 데이터들을 생성/읽기/갱신/삭제할 수 있음
명령어 기능
SET 데이터 저장
GET 데이터 조회
RENAME 데이터 수정
RANDOMKEY 하나의 key를 랜덤하게 검색
KEYS 모든 key값을 조회
EXISTS key 존재 여부 확인
DEL key를 삭제
FLUSHALL DB의 모든 key 삭제

 

Redis 클라우드 서버 열기

  • Redis는 로컬에 설치할 수 있고, 클라우드로 사용할 수 있음
  • 관리나 협업 측면에서 클라우드가 편리하기 때문에 클라우드에 redis를 설치한다.
 

[Redislabs] 📚 Redis를 클라우드로 사용하자

Redis 클라우드 MySQL을 사용하기 위해서 워크벤치를 설치했던 것 처럼, 레디스를 사용하려면 레디스 데이터베이스를 설치해야 한다. 직접 서버 컴퓨터에 직접 설치할 수도 있지만, 레디스를 호스

inpa.tistory.com

 

Redis EC2 서버 열기

  • Git bash에서 EC2 콘솔로 연결한 뒤 우분투 환경에서 진행한다.
sudo apt-get update
sudo apt install redis-server #redis-server 설치
sudo systemctl status redis-server #redis-server 상태 확인
sudo systemctl stop redis-server #redis-server 닫기
sudo systemctl start redis-server #redis-server 열기
sudo vi /etc/redis/redis.conf #redis-server 설정 파일 접근

redis-cli #redis 터미널에 접근

 

  • EC2의 인스턴스에서 인바운드 규칙에 redis 기본 포트인 6379를 0.0.0.0/0(모든 IPv4 접근 허용)으로 추가해준다.

 

  • redis conf 파일에 모든 ip에 대하여 접속이 가능하게 bind 설정을 한다.

bind를 찾아 로컬(127.0.0.1)로만 되어있는 주소를 0.0.0.0으로 바꿔준다.

 

접근하기 위한 비밀번호 또한 추가해준다.

  • 설정이 완료되면 "sudo systemctl restart redis-server" 명령어로 서버를 재시작하고 redis-cli에 접속해준다.
  • 이제 명령어를 입력하려면 "auth <password>"로 패스워드를 입력하고 사용해야 한다.

 

Node.js에서 redis 사용

Node.js에서 Redis에 접근하기 위해 패키지를 설치하고 코드를 작성한다.

yarn add redis

 

code example)

import { createClient } from 'redis';

async function main() {
  // Redis 클라이언트 생성
  const client = createClient({
    url: 'redis://<your-ec2-public-ip>:6379' // EC2 인스턴스의 퍼블릭 IP 주소
  });

  client.on('error', (err) => {
    console.error('Error connecting to Redis server:', err);
  });

  // Redis 서버에 연결
  await client.connect();

  console.log('Connected to Redis server');

  try {
    // 예제: Redis에 데이터 설정
    await client.set('key', 'value');
    console.log('Set key:', 'value');

    // 예제: Redis에서 데이터 가져오기
    const value = await client.get('key');
    console.log('Get key:', value);
  } catch (err) {
    console.error('Error interacting with Redis:', err);
  } finally {
    // Redis 클라이언트 종료
    await client.disconnect();
    console.log('Disconnected from Redis server');
  }
}

main().catch(console.error);