개발블로그

[Laravel 데이터 및 상태 관리] Redis 활용 본문

STUDY/Laravel

[Laravel 데이터 및 상태 관리] Redis 활용

devmel 2026. 8. 14. 12:00
Contents 접기
 

개념

 

개념

메모리는 중심으로 데이터를 저장하고 빠르게 읽고 쓸 수 있는 데이터 저장소

단순한 문자열뿐 아니라 다양한 자료구조(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)