[Redis] Redis란? 설치 방법과 활용법
회사에 입사하고 새롭게 접하게 된 Redis.
이전에 사용해 본 적이 없어서 생소하기도 하고,
사용해야 하는 이유와, 사용되는 로직이 잘 이해되지 않았다.
스스로 정리하지 않으니, 한 번 들어도 까먹게 되더라.
다음에 봤을 때 또 초면처럼 느끼지 않도록 정리해보자.
Redis란
우선 redis는 데이터 접근/저장/관리와 관련된 서비스다.
일반적으로 데이터는 데이터베이스에 저장하여,
필요할 때마다 쿼리를 실행해 불러오거나 저장하거나 한다.
그러나 개발을 하다보면 데이터 베이스에 접근하는 것은 시간이 많이 걸린다는 것을 느끼게 된다.
속도를 빠르게 하기 위해 데이터 베이스에도 캐싱이 적용되는데,
Redis가 자주 접근하는 데이터를 캐시에 두고 속도를 향상시키는 데이터 캐시 서버 역할을 한다.
Redis는 key-value 구조로 데이터를 저장한다.
key-value 구조이므로, NoSQL이다.
In-memory 저장 방식을 사용하여, 서버가 꺼지면 데이터가 모두 사라진다.
때문에 Redis가 전체 서비스의 주 데이터 베이스가 될 순 없고,
보통 속도 향상을 위한 보조 데이터베이스로 사용된다.
또 다른 특징은 데이터에 만료 시간을 지정할 수 있어
지정된 만료 시간이 지나면 그 데이터는 Redis에서 삭제된다.
이 특징 덕분에 Redis는 일시적으로 값을 만들었다 삭제해야 할 때도 사용된다.
만료되지 않았을 때에도 메모리가 꽉 차면
LRU(Least recently Used) 알고리즘에 의해 데이터가 삭제된다.
Redis 설치하기
맥북 사용자는 brew install 명령어로 redis를 설치할 수 있다.
brew install redis
설치 후에는 brew services 명령어로
redis를 실행, 중단, 재실행 할 수 있다.
brew services start redis
brew services stop redis
brew services restart redis
Redis 실행하기
Redis는 cli를 통해 명령어로 데이터 입력/수정/삭제/조회 등이 가능하다.
redis-cli
redis를 start하고 redis-cli 명령어를 입력하면
cli로 접속해 명령어를 입력할 수 있다.
주요 명령어들은 아래와 같다.
set | 데이터 저장 |
get | 저장된 데이터 조회 |
rename | 저장된 데이터 변경 |
randomkey | 저장된 key 중 하나의 key를 랜덤하게 검색 |
keys | 저장된 키들을 검색 |
exists | key 존재 여부 확인 |
mset | 다수의 데이터 저장 |
mget | 다수의 데이터 검색 |
keys * 명령어를 입력하면,
존재하는 모든 key들을 볼 수 있다.
keys *
존재하는 key들을 확인하여 get <key 이름>을 입력하면,
해당 key에 할당된 value를 확인할 수 있다.
key이름이 walwal이라면, walwal에 연결된 value를 확인하는 명령어는 아래와 같다.
get walwal
Redis 활용 방안
여기까지 보면 그래서 뭐...? 어디에 어떻게 사용하는 거지? 싶을 수 있다.
아직 나도 경험이 많지 않지만, 지금까지 내가 본 서버 개발에서 redis의 활용법은
redis의 데이터에 만료 기한 설정이 가능하다는 점을 이용해
일정 시간 동안만 값을 생성하여 유지하고,
시간이 지나면 그 값이 필요없어지는 경우에 사용하는 것이었다.
그래서 그런 값이 어디에 쓰이는지가 중요할텐데,
동시에 접근되어서는 안되는 자원을 보호할 때 사용된다.
이게 어떻게 가능하냐 하면,
특정 자원에 접근하기 전에 redis로 특정 key를 조회/생성하는 로직을 삽입한다.
그 key의 초기값은 0(또는 1)로 설정되며, 일정한 만료 시간을 갖고.
그 key에 접근할 때마다 값은 1씩 증가한다.
그리고 key에 접근했을 때 그 값이 0이 아니라면
로직이 실행되지 않도록 하는 조건문을 삽입한다.
이렇게 되면 redis 데이터의 만료 기한까지 그 로직은 처음 한 번만 실행된 후
실행되지 않도록 보호되므로
아주 짧은 시간 차로 요청을 보내도 동시에 실행되지 않는다.
각 언어에 맞게 redis 활용을 위한 다양한 메서드를 제공하는 라이브러리들이 있으니,
개발할 때는 그 라이브러리들의 사용법을 익혀 사용하면 되겠다.
Redis + Docker
redis는 주로 Docker에서 실행되는 경우가 많으니 참고하자.
개발 과정에서는 라이브러리의 메서드를 사용하고,
작성한 로직이 잘 실행되는지 확인하는 과정에서
redis cli를 사용하게 된다.
예컨대, API를 실행했을 때 key값이 잘 생성되었는지 확인하는 용도로
redis-cli를 실행해 keys * 명령어를 실행하면 되는 것이다.