
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로 해결된다.
나머지는 “필요할 때 찾아서 쓰는 도구”다.
'Programing & OS' 카테고리의 다른 글
| Redis 불편한 도구 그러나 (2) 어떻게 구조화 하는것이 redis에서는 올바른가 (0) | 2026.02.07 |
|---|---|
| Redis 불편한 도구 그러나 (0) | 2026.02.07 |
| 서버 Rocky9 설치시 웹서버 기본 보안 리스트 (0) | 2026.02.07 |
| 내가 조심해야 할 (“자기 타입을 자각한 중·고급 개발자의 운영 매뉴얼”) 탈출구 만들기 (0) | 2026.02.06 |
| SSH 키 배포(운영) 방식 정리 (0) | 2026.02.05 |