| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- SQL문법
- 라라벨
- 데코레이터패턴
- mcp client
- MCP
- 소프트웨어설계
- Tool Calling
- SQL
- dhgrp
- 객체복제
- MySQL
- Laravel
- docker network
- linux 권한
- docker
- ai 에이전트
- PHP객체지향
- LLM
- SQL기초
- Agent Loop
- mcp server
- 데이터베이스
- 어댑터패턴
- 인덱스
- PHP
- 매직메서드
- 디자인패턴
- 객체지향
- OOP
- ai agent
- Today
- Total
개발블로그
[Laravel 데이터 및 상태 관리] Redis 활용 본문
개념
개념
메모리는 중심으로 데이터를 저장하고 빠르게 읽고 쓸 수 있는 데이터 저장소
단순한 문자열뿐 아니라 다양한 자료구조(Hash, List, Set, Sorted Set, Stream 등)를 제공함
Laravel에서는 Redis를 여러 용도로 활용 할 수 있음.
ex) Cache, Session, Queue, Rate Limiting, Redis 직접 사용 등
Redis가 빠른 이유
Redis의 핵심 특징 중 하나인 데이터를 주로 메모리에서 다룬다는 특징
인메모리 데이터 저장소로 동작하며, 필요에 따라 데이터를 디스크에 지속시키는 Persistence 기능도 제공
Q) 데이터를 메모리에 다루는 게 빠른 이유
메모리는 SSD/HDD 같은 디스크보다 데이터 접근 속도가 훨씬 빠르다.
디스크는 데이터를 읽고 쓰는 과정에서 저장장치 I/O가 필요하지만, 메모리는 CPU가 데이터를 훨씬 빠르게 접근할 수 있기 때문
Redis는 매 요청마다 디스크에서 읽어오는 대신, 이미 메모리에 올라와 있는 데이터를 바로 조회/수정 할 수 있음
기본 구조
Key-Value
- Value에는 여러 자료구조를 사용할 수 있음
Redis 주요 자료구조
| 자료구조 | 구조 | 특징 | 실제 데이터 예시 | 대표 용도 |
| String | Key → Value | 하나의 Key에 하나의 값 저장 | post:100:view_count → 1520 | Cache, 조회수, Counter, Flag |
| Hash | Key → 여러 Field : Value | 하나의 Key 안에 여러 속성을 묶어 저장 | user:10 → name="홍길동", age=30, role="admin" | 사용자 정보, 객체 형태 데이터 |
| List | Key → 순서가 있는 값 목록 | 삽입 순서를 유지하고 앞/뒤에서 추가·삭제 가능 | user:10:notifications → ["댓글 알림", "좋아요 알림", "팔로우 알림"] | Queue, 최근 목록 |
| Set | Key → 중복 없는 값 집합 | 동일 값이 중복 저장되지 않음, 순서 없음 | post:100:liked_users → {10, 25, 31} | 좋아요 사용자, 태그, 그룹 |
| Sorted Set | Key → Member + Score | Member마다 점수를 가지고 Score 기준으로 정렬 | post:ranking → post:100(980점), post:35(820점), post:72(760점) | 인기순위, 랭킹 |
| Stream | Key → 순서대로 쌓이는 메시지 | 발생한 이벤트/메시지를 순서대로 누적 | order:events → [주문생성, 결제완료, 배송시작] | 이벤트 처리, 메시지 처리 |
Laravel에서 Redis 연결
Redis 서버에 연결할 설정이 필요함.
=> .env와 config/database.php의 redis 항목에서 관리
.env
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_DB=0
| 설정 | 의미 |
| REDIS_CLIENT | Laravel이 Redis와 통신할 때 사용할 Client |
| REDIS_HOST | Redis 서버 주소 |
| REDIS_PASSWORD | Redis 인증 비밀번호 |
| REDIS_PORT | Redis 서버 포트 |
| REDIS_DB | 사용할 Redis Database 번호 |
Laravel 내부에서는 이 정보를 이용해 Redis Connection을 정의
'redis' => [
// Redis Client = Redis와 대화하는 도구
'client' => env('REDIS_CLIENT', 'phpredis'),
// Redis Connection = 어디에 접속할지 적어둔 설정 묶음
'default' => [
'host' => env('REDIS_HOST'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT'),
'database' => env('REDIS_DB'),
], // default => Connection 이름
// 필요하면 Redis 연결을 여러 개 만들 수도 있음.
'cache' => [
// Cache용 Redis 사용
]
],
Redis 사용
Redis 직접 사용
Redis Facade
↓
Redis 명령 실행
Laravel 기능에서 사용
Cache / Session / Queue
↓
Redis를 저장소로 사용
Redis Facade 사용
먼저 Facade를 불러옴
use Illuminate\Support\Facades\Redis;
Redis Connection 선택
$redis = Redis::connection(
[$connection]
);
// $connection : config/database.php에 정의된 Redis Connection 이름/선택 (생략시 기본 Connection 사용)
Redis를 내부 저장소로 사용
Cache, Session, Queue 같은 기능은 Redis를 내부 저장소로 사용할 수 있음.
| Laravel 기능 | Redis에 저장되는 것 | 주요 설정 |
| Cache | Cache Data | CACHE_STORE=redis |
| Session | Session Data | SESSION_DRIVER=redis |
| Queue | 처리 대기 Job | QUEUE_CONNECTION=redis |
| Rate Limiting | 요청·동작 횟수 정보 | Cache Store의 limiter를 Redis Store로 지정 |
Redis 명령어
| 자료구조/구분 | 명령어 | 역할 | Laravel 호출 예 |
| String | SET | 값 저장 | Redis::set($key, $value) |
| GET | 값 조회 | Redis::get($key) | |
| INCR | 정수 값 1 증가 | Redis::incr($key) | |
| DECR | 정수 값 1 감소 | Redis::decr($key) | |
| INCRBY | 정수 값을 지정한 만큼 증가 | Redis::incrby($key, $increment) | |
| DECRBY | 정수 값을 지정한 만큼 감소 | Redis::decrby($key, $decrement) | |
| Hash | HSET | Field-Value 저장 | Redis::hset($key, $field, $value) |
| HGET | 특정 Field 조회 | Redis::hget($key, $field) | |
| HGETALL | 전체 Field-Value 조회 | Redis::hgetall($key) | |
| HEXISTS | 특정 Field 존재 여부 확인 | Redis::hexists($key, $field) | |
| HDEL | 특정 Field 삭제 | Redis::hdel($key, $field) | |
| HINCRBY | Field의 정수 값을 지정한 만큼 증가 | Redis::hincrby($key, $field, $increment) | |
| List | LPUSH | List 앞쪽에 값 추가 | Redis::lpush($key, $value) |
| RPUSH | List 뒤쪽에 값 추가 | Redis::rpush($key, $value) | |
| LPOP | List 앞쪽 값 제거 후 반환 | Redis::lpop($key) | |
| RPOP | List 뒤쪽 값 제거 후 반환 | Redis::rpop($key) | |
| LRANGE | 지정 범위의 값 조회 | Redis::lrange($key, $start, $stop) | |
| LLEN | List의 값 개수 조회 | Redis::llen($key) | |
| LTRIM | 지정 범위의 값만 남김 | Redis::ltrim($key, $start, $stop) | |
| Set | SADD | Member 추가 | Redis::sadd($key, $member) |
| SMEMBERS | 전체 Member 조회 | Redis::smembers($key) | |
| SISMEMBER | 특정 Member 존재 여부 확인 | Redis::sismember($key, $member) | |
| SREM | Member 삭제 | Redis::srem($key, $member) | |
| SCARD | Member 개수 조회 | Redis::scard($key) | |
| SINTER | 여러 Set의 교집합 조회 | Redis::sinter($key1, $key2 [, ...$keys]) | |
| SUNION | 여러 Set의 합집합 조회 | Redis::sunion($key1, $key2 [, ...$keys]) | |
| Sorted Set | ZADD | Member와 Score 저장 | Redis::zadd($key, $score, $member) |
| ZRANGE | 지정 범위 Member 조회 | Redis::zrange($key, $start, $stop) | |
| ZINCRBY | Member의 Score 증가 | Redis::zincrby($key, $increment, $member) | |
| ZRANK | 낮은 Score 기준 Member 순위 조회 | Redis::zrank($key, $member) | |
| ZREVRANK | 높은 Score 기준 Member 순위 조회 | Redis::zrevrank($key, $member) | |
| ZSCORE | Member의 Score 조회 | Redis::zscore($key, $member) | |
| ZREM | Member 삭제 | Redis::zrem($key, $member) | |
| Stream | XADD | Stream에 메시지 추가 | Redis::xadd(...) |
| XREAD | Stream 메시지 조회 | Redis::xread(...) | |
| XRANGE | ID 범위의 메시지 조회 | Redis::xrange(...) | |
| Key 공통 | EXISTS | Key 존재 여부 확인 | Redis::exists($key) |
| DEL | Key 삭제 | Redis::del($key) | |
| EXPIRE | Key에 TTL 설정 | Redis::expire($key, $seconds) | |
| TTL | 남은 TTL 확인 | Redis::ttl($key) | |
| PERSIST | 설정된 만료 시간 제거 | Redis::persist($key) | |
| TYPE | Key의 자료구조 확인 | Redis::type($key) | |
| RENAME | Key 이름 변경 | Redis::rename($key, $newKey) |
'STUDY > Laravel' 카테고리의 다른 글
| [Laravel 데이터 및 상태 관리] 성능 및 데이터 재사용 - Cache (0) | 2026.08.13 |
|---|---|
| [Laravel 데이터 및 상태 관리] 사용자 상태 관리 - Cookie와 Session (0) | 2026.08.13 |
| Laravel 화면 데이터 구성 - Presenter, ViewModel, View Composer (0) | 2026.08.12 |
| Laravel 프로젝트 구조와 주요 클래스·MVC패턴 개요 (0) | 2026.08.11 |