본문 바로가기
Programing & OS

Redis 자료형 그리고 간단한 설치

by 자루스 2026. 2. 7.

Redis에 대해서 감을 잡는데 너무나 오랜시간이 흘렀다.
설명에는 부하 분산이라고 이야기들을 많이 한다. 그래서 마치 웹서비스 요청시에 웹서버 대신 하는 것처럼 그려놓은것으로 나는 오해했다.

Redis는 메모리에 data를 저장하는 도구이다. 
어떤 언어든 redis를 지원한다면 사용가능하다.

이것을 왜 사용하냐는 간단하다 디비를 너무 써서 디비가 느려져서 힘드니까.
전에 나는 이 이슈을 해결하고자 메모리에 올려놓고 데몬으로 해결했다. (이래서 꼰대인가보다)
이렇게 좋은 도구가 오래 전에 이미 나와있는데.....


설치는 다음과 같이 간단하다. rocky9 기준이지만 다른 OS에서도 간단하게 된다. centos, ubuntu도

Rocky Linux 9에서 Redis 설치하기 (Nginx 환경 기준)

Redis는 HTTP를 직접 받는 서버가 아니라, PHP / CLI(워커)가 접속해 사용하는 공용 메모리 저장소다.
이 글은 Rocky Linux 9 + Nginx + PHP 환경에서 Redis를 로컬 전용(외부 공개 금지)으로 설치하는 기본 절차를 정리한다.


0) 전제 환경

  • OS: Rocky Linux 9
  • Web: Nginx + PHP-FPM
  • 용도: 상태 관리 / 큐 / 캐시
  • 운영 원칙: Redis 포트(6379) 외부 공개 ❌

1) Redis 설치

dnf install -y redis

설치 확인

redis-server --version

2) Redis 설정 파일 수정

vi /etc/redis/redis.conf

2-1) 로컬 접근만 허용 (중요)

bind 127.0.0.1 -::1
protected-mode yes
  • 127.0.0.1 : IPv4 로컬 접속만 허용
  • -::1 : IPv6 루프백 명시적 차단
  • protected-mode yes : 설정 실수 시 외부 노출 방지

2-2) 포트 확인

port 6379

기본 포트 그대로 사용 권장.
로컬 사용 시 방화벽에서 열 필요 없음.

2-3) 메모리 부족 시 제거 정책 (선택)

maxmemory-policy allkeys-lru

메모리가 부족해지면 오래 사용하지 않은 키부터 자동 제거.
캐시 / 상태 / 큐 용도에 적합한 기본 정책.

2-4) 영속성 설정

Redis는 기본적으로 RDB 스냅샷 설정이 포함되어 있다.
초기에는 기본값 유지 권장.


3) Redis 실행 및 부팅 자동 시작

systemctl enable redis --now

상태 확인

systemctl status redis

4) 방화벽 확인

Redis를 로컬에서만 사용한다면 6379 포트를 외부에 열 필요가 없다.

firewall-cmd --list-all

5) Redis CLI 테스트

redis-cli
SET test hello
GET test

정상 출력

"hello"

6) PHP 연동 (phpredis 확장)

6-1) PHP Redis 확장 설치

dnf install -y php-pecl-redis

확장 로드 확인

php -m | grep -i redis

6-2) PHP 테스트 코드

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$redis->set('php_test', 'ok');
echo $redis->get('php_test');
?>

브라우저 또는 CLI에서 실행 시 ok가 출력되면 연동 성공.


7) Nginx 환경에서 Redis의 위치

Redis는 Nginx가 직접 접근하지 않는다.
PHP / 워커(데몬 역할)가 Redis를 사용하고, 확정 데이터만 DB에 저장한다.

[HTTP 요청]
   ↓
 Nginx
   ↓
 PHP-FPM
   ↓
 Redis (메모리 / 큐 / 상태)
   ↓
 DB (확정 기록)

8) 운영 기본 원칙

  • Redis는 외부 공개 금지
  • DB = 기록 / Redis = 상태·임시·큐
  • 비동기 처리는 Redis 큐 + 워커로 분리
redis를 사용하면서 가장 중요한것은 저장 TYPE이다.
자료를 제대로 잘 불러쓰기 위해서 Redis를 쓰는데 Type을 모르고 쓰면 !!!! 안되겠지요...
아래와 같다.

Redis 자료형 1~8 정리 (중요도 기준)

Redis는 단순한 캐시 서버가 아니라 메모리 기반 자료구조 서버다.
모든 데이터는 Key → 자료형(Type) 구조를 가지며, 자료형 선택 자체가 설계가 된다.


1️⃣ STRING (중요도 ★★★★★)

가장 기본이자 가장 많이 쓰는 타입

  • 값 하나 저장 (문자, 숫자, JSON 모두 가능)
  • 카운터, 상태값, 락(lock)에 최적
SET key value
GET key
INCR counter

사용 예: 플래그, 토큰, 좌석 상태, 임시 락


2️⃣ HASH (중요도 ★★★★★)

Redis에서 객체를 표현할 때 가장 많이 사용

  • 하나의 key 안에 여러 필드
  • 부분 수정 가능
HSET user:1 name kim
HSET user:1 age 30
HGETALL user:1

사용 예: 유저 상태, 좌석 현황판, 세션 정보


3️⃣ LIST (중요도 ★★★★☆)

큐(queue) / 비동기 처리의 핵심

  • 순서 있는 리스트
  • BRPOP으로 데몬처럼 대기 가능
LPUSH job_queue data
BRPOP job_queue 0

사용 예: 작업 큐, 예약 처리, 로그 비동기 저장


4️⃣ SET (중요도 ★★★☆☆)

중복을 허용하지 않는 집합

  • 이미 처리했는지 여부 체크
  • 순서 없음
SADD processed_ids 123
SISMEMBER processed_ids 123

사용 예: 중복 방지, 온라인 유저 목록


5️⃣ ZSET (Sorted Set) (중요도 ★★★☆☆)

점수(score)를 기준으로 자동 정렬되는 집합

  • 순위, 시간 기반 정렬
  • 우선순위 큐 역할 가능
ZADD leaderboard 100 user1
ZRANGE leaderboard 0 -1 WITHSCORES

사용 예: 랭킹, 최근 접속 순서, 만료 시간 관리


6️⃣ BITMAP (중요도 ★☆☆☆☆)

비트 단위로 상태 저장 (고급)

  • 메모리 사용량 극도로 적음
  • 대량 boolean 상태 관리
SETBIT login:20260207 1001 1
GETBIT login:20260207 1001

사용 예: 출석 체크, on/off 상태


7️⃣ HYPERLOGLOG (중요도 ★☆☆☆☆)

대략적인 유니크 카운트용

  • 정확도 약간 희생
  • 메모리 사용 극소
PFADD uv today user1
PFCOUNT uv today

사용 예: 대규모 UV 추정


8️⃣ STREAM (중요도 ★☆☆☆☆)

로그 형태의 메시지 스트림 (심화)

  • Kafka 경량 대체
  • Consumer Group 지원
XADD mystream * field value
XREAD BLOCK 0 STREAMS mystream $

사용 예: 이벤트 로그, 복잡한 메시지 처리


중요도 요약

  • 필수: STRING, HASH
  • 자주 사용: LIST
  • 상황별: SET, ZSET
  • 고급/선택: BITMAP, HYPERLOGLOG, STREAM

결론
Redis 실무의 80%는 STRING / HASH / LIST로 해결된다.
나머지는 “필요할 때 찾아서 쓰는 도구”다.