redis란

2023년 08월 28일

redis(레디스)란?

redis는 메모리 상에 데이터를 저장하는 서버로, key-value 형태로 데이터가 저장되고 사용된다. 주로 서비스의 캐시 기능을 만들 때 사용한다.

캐시?

요청의 결과를 미리 저장해놓는 임시 데이터 저장소. 재사용 횟수가 많은 데이터를 빠른 속도로 응답해줄 수 잇다.

모든 요청을 스토리지 기반 서버에서 데이터를 읽을 경우 서버에 많은 부하가 걸리고 응답 또한 느릴 수 있다. 그럴 때 캐시를 활용하면 빠른 응답을 구현할 수 있다.


redis 사용법

redis 설치하기, 실행하기

로컬에서 레디스 서버를 만들고 실행하는 방법을 알아보자.

  1. redis 설치 (mac os기준)
brew install redis

*다른 OS는 홈페이지의 설치방법 참고 https://redis.io/docs/getting-started/installation/

  1. redis 서버 실행
redis-server
  1. redis-cli 사용하기

레디스 서버를 실행시킨 상태에서 아래 코드를 커맨드창에 입력하자.

redis-cli

127.0.0.1:6379> 처럼 커맨드창이 바뀌면 성공이다.

cli환경에서 나오고 싶으면 quit을 입력한다

redis 기본 명령어

데이터 저장 및 확인

  • SET name dugi : name이라는 key로 dugi라는 value를 저장한다.
  • GET name : name이라는 key로 data를 찾는다.
  • DEL name : name key의 데이터를(key-value 모두) 삭제한다.
  • EXISTS name : key 있는지 확인
    • 응답값 0 : 데이터가 존재하지 않음
    • 응답값 1: 데이터 존재함
  • flushall : 모든 데이터 삭제
  • KEYS * : 모든 키 검색 - 운영 시 사용하지 않는다. 그 이유는 아래 주의사항에 적는다.

유효기간 확인 및 설정

  • ttl name : 유효기간 확인. -1일 경우 유효기간 없는 것. -2는 유효기간 지난 것
  • expire name 10 : 유효기간 10초로 설정
  • setex name 10 dugi : set하면서 유효기간 10초로 설정

더 자세한 redis 명령어는 이곳에

beatandbite.com/posts/redis-cli-commands


redis의 특징 & 사용시 주의사항

1) redis는 인메모리 데이터베이스다.

인메모리 데이터베이스는 HDD, SSD 스토리지와 다른 특징을 가진다.

빠르고, 비싸며, 휘발성이 있다. 휘발성을 특히 주의해야한다. 서버 재시작시 모든 데이터가 유실 되기 때문에 안전하게 저장해야하는 정보는 redis를 주저장소로 사용하지 말아야한다..

2) redis는 싱글스레드 서버

싱글스레드 서버이므로 한 사용자가 오래 걸리는 커맨드를 실행하면 나머지 요청은 모두 대기하게 된다.

실제 운영 환경에서는 KEYS * 같이 모든 ket를 검색하는 요청을 보내지 않는다.

3) 메모리 파편화

데이터를 저장하는 과정에서 메모리를 사용하게 되는데, 메모리를 할당하도 해제하는 과정에서 사용되지 않는 메모리의 빈 부분이 생긴다. 그래서 실제 데이터 용량보다 더 많이 메모리가 사용될 수 있다. 그래서 메모리를 여유있게 사용하는 것이 좋다.

4) maxmemory-policy

redis 서버에 데이터가 가득 찼을 때 redis는 어떻게될까?

redis 기본 설정 값은 maxmemory-policy=noeviction 으로 메모리가 다 차도 이전 데이터를 삭제하지 않는다. 이런 상황이 발생할 경우 메모리 부족으로 장애가 발생할 수 있다.

기본 설정을 바꿔서 메모리 부족시 최근에 사용하지 않은 키를 자동으로 삭제하게 할 수 있다. 이 설정에는 2가지 종류가 있다.

  • maxmemory-policy=allkeys-lru : 모든 키에 대해 lru방식(가장 최근에 사용하지 않은 키만 삭제)으로 삭제 → 메모리가 차면 삭제되므로 에러 나지 않음
  • maxmemory-policy=volatile-lru : lru(가장 최근에 사용하지 않은 키만 삭제) + 유효기간이 있는 파일만 삭제 → 메모리 다 차버릴수도 있고 장애 발생 가능성 있음

레디스를 캐시로 사용하는 경우 maxmemory-policy=allkeys-lru로 설정해서 사용하자


관련 글


TAGS
REDIS