Redis 정의 및 설치

W·2024년 1월 17일
0

BackEnd & Devops

목록 보기
4/13

Redis

Remote Dictionary Server

Ref.

[DB] Redis란 무엇일까? 간단하게 알아보기!
Install Redis

정의

메모리에 저장하는 Key-Value(Dictionary) 기반의 NoSQL 인메모리 DBMS.

(캐시 시스템)

  • 캐시 : 나중의 요청에 대한 결과를 미리 저장해두었다가 빠르게 사용하는 것.

mongoDB와 같은 NoSql인데 메모리에서 데이터를 다루기 때문에 성능이 더 좋다.

사용처

  • 여러 서버에서 같은 데이터를 공유할때 사용
  • 한개의 서버일 경우에도 캐시 기능을 사용하고 싶을 때
  • 한개의 서버일 경우는 그냥 전역변수쓰는 것보다 원자성을 보장하는 Redis를 쓰는 경우도 있다.

Commands (명령어)


특징

  • Single Thread
    • 한번에 하나의 명령만을 처리하기 때문에 Race Condition이 거의 발생하지 않는다.
  • Performance
    • 초당 10만 TPS 이상 처리 가능.
  • 백업기능 (영속성 보장)
  • 다양한 자료구조 지원

주의점

  • Single Thread 이기때문에 시간 복잡도를 고려해야한다.
    • O(n) → X , O(1)를 사용하는게 제일 좋다.
    • KEYS, Flush, GetAll 같은 연산자 사용시 주의..!!!
  • Fork 연산시 주의

Redis의 지속성(영속성)

기본적으로 Redis가 수시로 데이터 세트를 자동으로 저장한다.

예를 들어 데이터에 100개 이상의 변경 사항이 있는 경우 최소 5분 후에 저장한다.

비활성으로 유지하려면 데이터 세트 스냅샷을 강제로 생성할 때마다 save 명령을 수동으로 호출하거나,

shutdown 명령을 사용하여 종료하기 전에 디스크에 데이터를 저장해야 한다.

redis-cli shutdown

Redis 지속성이 어떻게 작동하는지 더 잘 이해하려면 지속성 페이지를 확인바랍니다.

  • RDB(SnapShot)방식
    • 순간적으로 메모리에 있는 내용을 DISK에 전체를 옮겨 담는 방식
  • AOF(Append On File)방식
    • Redis의 모든 write/update 연산 자체를 모두 log파일에 기록하는 형태

설치

brew install redis
redis-server (Redis Server 실행 -> ForeGround에서의 실행)
redis-cli (Redis Client 접속)

brew services start redis (실행 -> BackGround에서의 실행)
brew services stop redis  (중지)
brew services restart redis (재시작)

flushAll (Redis 모든 Key 삭제)

확인

  • 정보 확인
brew services info redis

  • Redis가 제대로 작동하는지 확인
redis-cli ping
PONG -> 결과

or

redis-cli 로 먼저 진입 후
127.0.0.1:6379> ping
PONG -> 결과

보안

기본적으로 Redis는 모든 인터페이스에 바인딩되며 인증이 전혀 없다. (보안이 없다고 봐야한다.)

  1. Redis가 연결을 수신하는 데 사용하는 포트(기본적으로 6379, 클러스터 모드에서 Redis를 실행하는 경우 추가로 16379, Sentinel의 경우 26379)가 방화벽으로 설정되어 외부에서 Redis에 연결할 수 없도록 확인하세요.
  2. bindRedis가 사용 중인 네트워크 인터페이스에서만 수신 대기하도록 보장하려면 지시문이 설정된 구성 파일을 사용하십시오 . 예를 들어 동일한 컴퓨터에서 로컬로 Redis에 액세스하는 경우 루프백 인터페이스(127.0.0.1)만 사용됩니다.
  3. requirepass[AUTH](https://redis.io/commands/auth)클라이언트가 명령을 사용하여 인증하도록 요구하도록 추가 보안 계층을 추가하려면 옵션을 사용하십시오.
  4. 환경에 암호화가 필요한 경우 스파이핑 또는 다른 SSL 터널링 소프트웨어를 사용하여 Redis 서버와 Redis 클라이언트 간의 트래픽을 암호화합니다.

보안 없이 인터넷에 노출된 Redis 인스턴스는 악용되기가 매우 간단하므로 위 내용을 이해하고 최소한 방화벽 계층을 적용하십시오 . 방화벽이 설치된 후 redis-cli외부 호스트에서 연결을 시도하여 인스턴스에 연결할 수 없는지 확인합니다.

지원 클라이언트

  • .NET
  • Node.js
  • Python
  • Spring
  • 그 외 오픈소스라이브러리 참조 (swift, dart … etc)

CLI가 아닌 앱에서 설치하고 실행하기

약간의 해킹이나 개발을 위해서는 명령줄에서 Redis를 실행하는 것이 좋습니다. 그러나 어느 시점에서는 실제 서버에서 실행할 실제 애플리케이션을 갖게 될 것입니다. 이러한 종류의 사용에는 두 가지 선택 사항이 있습니다.

  • 화면을 사용하여 Redis를 실행합니다.
  • init 스크립트를 사용하여 올바른 방법으로 Linux 상자에 Redis를 설치하면 다시 시작한 후 모든 것이 제대로 다시 시작됩니다.

init 스크립트를 사용하여 올바르게 설치하는 것이 좋습니다.

💡 지원되는 Linux 배포판에 사용 가능한 패키지에는 이미 Redis 서버를 에서 시작하는 기능이 포함되어 있습니다 **`/etc/init`**. 💡 이 섹션의 나머지 부분에서는 **[소스 코드에서 Redis를 설치했다고](https://redis.io/docs/install/install-redis-from-source/)** 가정합니다 . **[대신 Redis Stack을 설치한 경우 기본 init 스크립트를](https://raw.githubusercontent.com/redis/redis/7.2/utils/redis_init_script)** 다운로드 한 후 Redis Stack이 플랫폼에 설치된 방식에 맞게 스크립트와 다음 지침을 모두 수정해야 합니다 . 예를 들어 Ubuntu 20.04 LTS에서는 Redis Stack이 **`/opt/redis-stack`**가 아닌 에 설치되므로 **`/usr/local`**적절하게 조정해야 합니다.

Redis 소스 코드와 함께 제공되는 init 스크립트를 사용하여 적절한 설치를 수행하려면 다음 지침을 사용할 수 있습니다 /path/to/redis-stable/utils/redis_init_script.

Redis 소스를 빌드한 후 아직 실행하지 않은 경우 make install계속하기 전에 먼저 실행해야 합니다. 기본적으로 에서는 및 바이너리를 에 make install복사합니다 .redis-serverredis-cli/usr/local/bin

  • Redis 구성 파일과 데이터를 저장할 디렉터리를 만듭니다.
    sudo mkdir /etc/redis
    sudo mkdir /var/redis
  • utils 디렉터리 아래 Redis 배포판에서 찾을 수 있는 init 스크립트를 /etc/init.d. 이 Redis 인스턴스를 실행 중인 포트 이름으로 호출하는 것이 좋습니다. 결과 파일에 0755권한이 있는지 확인하십시오.
    sudo cp utils/redis_init_script /etc/init.d/redis_6379
  • 초기화 스크립트를 편집합니다.
    sudo vi /etc/init.d/redis_6379

REDISPORT 변수를 사용 중인 포트로 설정했는지 확인하십시오 . pid 파일 경로와 구성 파일 이름은 모두 포트 번호에 따라 다릅니다.

  • Redis 배포판의 루트 디렉터리에 있는 템플릿 구성 파일을 /etc/redis/포트 번호를 이름으로 사용하여 복사합니다. 예:
    sudo cp redis.conf /etc/redis/6379.conf
  • /var/redis이 Redis 인스턴스에 대한 데이터 및 작업 디렉터리로 작동할 디렉터리를 내부에 만듭니다 .
    sudo mkdir /var/redis/6379
  • 구성 파일을 편집하여 다음 변경 사항을 수행했는지 확인하십시오.
    • daemonize를 yes로 설정합니다 (기본적으로 no로 설정됨).
    • pidfile을 /var/run/redis_6379.pid 로 설정하고 필요에 따라 포트를 수정합니다.
    • 이에 따라 포트를6379 변경하십시오 . 이 예에서는 기본 포트이므로 필요하지 않습니다
    • 원하는 로그 수준을 설정하세요
    • 로그/var/log/redis_6379.log파일
    • dir을/var/redis/6379 (매우 중요한 단계!) 설정해야한다.
  • 마지막으로 다음 명령을 사용하여 모든 기본 런레벨에 새로운 Redis init 스크립트를 추가합니다.
    sudo update-rc.d redis_6379 defaults

이제 다음을 사용하여 인스턴스를 실행할 수 있습니다.

sudo /etc/init.d/redis_6379 start

모든 것이 예상대로 작동하는지 확인하세요.

  1. redis-cli [PING](https://redis.io/commands/ping)명령을 사용하여 세션 내에서 인스턴스를 ping해 보세요.
  2.  redis-cli save/var/redis/6379/dump.rdb로 테스트 저장을 수행하고 덤프 파일이 에 올바르게 저장되었는지 확인.
  3. Redis 인스턴스가 /var/log/redis_6379.log파일에 로깅 중인지 확인하세요.
  4. 문제 없이 사용해 볼 수 있는 새 머신이라면 재부팅 후에도 모든 것이 여전히 작동하는지 확인하세요.
profile
타협하는 순간 발전이 없어

0개의 댓글