Development note/Linux

[CentOS] Redis 데이터베이스 설치와 명령어 사용법

v명월v 2022. 2. 14. 18:30

안녕하세요. 명월입니다.


이 글은 CentOS에서 Redis 데이터베이스 설치와 명령어 사용법에 대한 글입니다.


Redis란 RDB 타입과는 다른 NoSQL 타입의 데이터베이스입니다. 즉, SQL로 데이터를 입력, 취급하는 데이터베이스가 아닌 특정 API를 통해 다루는 데이터베이스입니다.

구조는 Key - Value 구조이고 InMemory 구조로 되어 있어 빠른 삽입, 검색이 가능한 데이터베이스입니다...


사실 Redis에 대해서 구글등을 통해 조사하면 여러가지 정확한 정의와 설명이 있습니다.

저는 조금 더 이해하기 쉽게 설명하면 그냥 Share Memory, 즉 메모리를 공유하는 시스템이라고 생각됩니다.


보통 프로그램을 기동하면 안의 변수등을 통해서 메모리에 데이터를 할당합니다. 그 메모리에 할당된 데이터들은 OS의 프로세스 메모리 보호 기능으로 다른 프로그램에서 메모리 접근을 할 수 없습니다.

즉, A프로그램과 B프로그램을 실행하고, B프로그램에서 할당된 클래스의 데이터를 A프로그램에서 사용하고 싶다고 하면 소켓 통신을 통해서 데이터를 공유하게 됩니다. 일반적인 방법입니다.

여기서 프로그램이 하나 더 추가된다고 하면 메모리 공유 흐름이 복잡하게 됩니다. B프로그램에서 생성된 메모리 데이터를 A프로그램에서 수정합니다. 그럼 B프로그램은 C프로그램에 값이 변경된 것을 통보합니다.

다시 여기서 프로그램 하나 더 추가합니다. 즉, 프로그램이 늘어날수록 흐름이 훨씬 더 복잡하게 되겠네요.


물론 File IO로 공유할 수도 있습니다만, 그럼 다시 IO의 Connection에 흐름을 생각해야 합니다. 즉, 파일에 데이터를 쓰는 입장에서 Connection를 잡고 있다고 하면 다른 프로그램에서는 파일 수정이 불가능합니다.

여러가지 불편한 흐름과 규약이 생기겠네요..


그렇다면 가장 쉽게 해결할 수 있는 것이 Map 구조로 된 메모리와 소켓 통신으로 Set, Get으로 Map 메모리에 접근이 가능한 프로그램이 있으면 됩니다. 그것이 Redis입니다.

Redis 프로그램은 Java에서 Map, C#에서는 Dictionary 구조의 변수 하나와 소켓을 통해 외부에서 데이터를 저장, 취득이 가능한 프로그램입니다.


CentOS에서는 간단한게 yum으로 설치가 가능합니다.

# Redis 설치
yum install redis
# Redis 실행
systemctl start redis
# Redis 부팅 등록
systemctl enable redis
# 버젼 확인
redis-server --version

그리고 환경 설정은 /etc/redis.conf의 경로에 있습니다. 환경 설정에 대해서는 아래에서 자세히 설명하겠습니다.

일단은 yum으로 간단하게 설치가 가능합니다만, 버젼이 매우 낮네요.. redis 홈페이지에는 6.2 버전이 있는데 yum으로는 3.x 버전이네요.


그럼 홈페이지에서 다운 받아서 설치해 보겠습니다.

링크 - https://redis.io/download


그리고 링크 주소를 복사합니다.

그리고 wget으로 다운로드합니다.

그리고 압축 풀고 빌드합니다.

tar xzf redis-6.2.6.tar.gz
cd redis-6.2.6
make install

설치가 완료되었습니다.


먼저 서비스 등록 파일을 작성합니다.

vim /etc/systemd/system/redis.service
[Unit]
Description=Redis

[Service]
User=root
Group=root
ExecStart=/home/redis/redis-6.2.6/src/redis-server /home/redis/redis-6.2.6/redis.conf
ExecStop=/home/redis/redis-6.2.6/src/redis-cli shutdown

이제 Redis를 실행하겠습니다.

#실행
systemctl start redis.service
#정지
systemctl stop redis.service

실행하고 src폴더의 redis-cli를 실행하겠습니다.

여기까지의 화면이 나오면 설치가 완료되고 실행이 된 것입니다.


이제는 Redis 명령어로 데이터를 저장, 취득해 보겠습니다.

Redis 명령어

Redis에서 사용되는 명령어는 굉장히 많습니다.

링크 - https://redis.io/commands

그런데 자주 사용되는 명령어는 얼마 되지 않습니다. 자주 사용하는 명령어만 정리합니다.

명령어 설명
set [key] [value] key의 값을 키로 데이터를 저장한다.
get [key] key의 값을 키로 데이터를 취득한다.
rename [key] [newkey] key의 값을 변경한다.
keys [pattern] key를 검색한다. 「*를 넣으면 모든 키를 취득한다.」
exists [key] key가 존재하는 지 확인한다.
del [key] key의 값을 키로 데이터를 삭제한다.
flushall 모든 키를 삭제한다.
append [key] [value] key의 값을 키로 데이터의 값을 추가한다.
setex [key] [seconds] [value] key의 값을 키로 데이터의 만료 시간 설정한다.
ttl [key] key의 값을 키로 데이터의 만료 시간 확인한다. -1의 경우, 만료 시간이 설정되지 않았다.
save 현재 Redis의 데이터 상태를 백업한다. 파일명은 config에서 설정한다.

Redis 환경 설정

Redis의 환경 설정은 버전마다 차이가 큽니다. 확인하고 설정을 해야 합니다.

링크 - https://redis.io/topics/config

링크 - http://redisgate.kr/redis/server/redis_conf_han.php

세부적인 설정이 다를 뿐 자주 사용되는 포트 설정과 bind 설정은 비슷하니 확인하면 됩니다.

환경 설정 설명
bind [ip] ... 허용되는 ip 설정
예) bind 192.168.0.100 192.168.0.100 (해당 ip만 허가)
예) bind 127.0.0.1 -::1 (로컬만 허가)
예) bind * -::* (모든 ip 허가)
protected-mode [boolean] 보호 모드가 활성화되어 있으면 로컬만 접속 허용합니다.
port [number] 포트 설정
dir [direcotry path] 작업 디렉토리 설정
dbfilename [filename] 백업 저장 파일명 설정
save [seconds][changes] 지정된 시간 안에 키가 지정된 개수만큼 변경되면 백업
# save 900 1 (900초(15분) 동안 적어도 1개 이상의 키가 변경되면 저장합니다.)

Redis에 대해서 4~5년 전부터 알고는 있었는데, 그 활용 여부에 대해서는 크게 느끼지를 못하다가 1~2년 전에 웹 서버 세션 클러스터링으로 성능이 괜찮다고 생각 된 후로 계속 사용하게 된 데이터베이스입니다.

그 후로 여러 시스템에서 쉐어 메모리로써 사용하기에 생각보다 사용하기 편하고 설치도 간편해서 최근에는 자주 사용하게 되었습니다.


물론 프로그램 간에 데이터를 주고 받을 때는 직접적인 소켓 통신이 정확하지만, 같은 서버에서 여러 프로그램을 움직이거나 마이크로 서비스, 즉 하나의 도메인에서 여러 서버로 분할하여 프로그램을 작성할 때는 꽤 유용하게 사용할 수 있습니다.


여기까지 CentOS에서 Redis 데이터베이스 설치와 명령어 사용법에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.