티스토리 뷰

728x90

Predis vs PHPRedis

PHP의 대표적인 Redis 클라이언트

  • Predis : Pure PHP로 개발됐음
    • 장점 : composer로 다운로드 가능. 편리한 의존성 관리
    • 단점 : PHPRedis 대비 성능 느림 → 대용량 트래픽 처리 아니면 체감하기 어려운 수준
    • https://github.com/predis/predis
  • PHPRedis : C언어로 만들어졌음.

=> 필자는 신규 서비스를 개발하는 중이어서 패키지 관리가 용이한 Predis를 선택

 

Predis 기본 셋팅

Predis 설치하기

composer require predis/predis

env 설정하기

REDIS_CLIENT=predis # PHPRedis를 사용할 경우 phpredis
REDIS_HOST=localhost # elasticCache 등 외부 호스트가 있을 경우 그 주소 삽입
REDIS_PASSWORD={password} # default : null
REDIS_PORT={port} # default : 6379

config/app.php의 Redis aliases 주석 풀기

기존에 주석되어있던걸 주석 풀어주기

'Redis' => Illuminate\\Support\\Facades\\Redis::class,

Predis 사용하기

Predis에서 제공하는 Client를 사용하는 방법과 Laravel에서 제공하는 Redis Facade에 Predis를 매핑하여 사용하는 방법이 있다.

  Predis Redis Facade
장점 메소드가 자동완성되어 필요한 커멘드를 찾기 용이하다 - env에 커넥션 정보만 등록하면 자동으로 연결시켜준다.
- 인스턴스 생성 없이 static 메소드로 사용 가능하다
단점 인스턴스 생성할 때마다 커넥션을 직접 연결해야 한다 메소드가 자동완성되지 않아 모르는 메소드는 직접 찾아봐야 한다

원하는 메소드를 인터페이스에서 먼저 찾아보고 없으면 검색하는 편이기 때문에 자동완성이 안 되는 건 필자에게 너무 치명적이었다

협업하면서 사용하기에도 Predis Client 쪽이 더 좋을 것 같아 Predis Client를 선택하였다

둘 다 간단하니 직접 써보고 니즈에 맞는 걸 선택하면 될 것 같다

 

(단위테스트 할 걸 생각하면 Redis Facade 쓰는 것이 테스트 더블로 만들기가 간단해서 더 좋을 것 같다.)

 

Predis의 클라이언트를 사용할 경우

use Predis\\Client;
// ...
$redis = new Client([
    'scheme' => 'tcp',
    'host' => env('REDIS_HOST'),
    'port' => env('REDIS_PORT'),
]);

$redis->set('name', 'bori'); # {name : bori} 데이터 등록
$redis->expire('name', 5); # 5초 후 삭제되도록 TTL 설정

var_dump($redis->get('name')); # bori
var_dump($redis->ttl('name')); # 5
sleep(5);
var_dump($redis->get('name')); # null (5초 후 삭제됨)
var_dump($redis->exists('name')); # 0 (name 키의 데이터 없음)

 

Redis Facade를 사용할 경우

env 설정 (REDIS_CLIENT=predis) 으로 이미 매핑 완료

인스턴스 생성, 커넥션 연결 등 별도 셋팅 없이 static 메소드로 바로 사용

use Illuminate\\Support\\Facades\\Redis;
// ...
Redis::set('name', 'bori');
Redis::expire('name', 5);

var_dump(Redis::get('name')); # bori
var_dump(Redis::ttl('name')); # 5
sleep(5);
var_dump(Redis::get('name')); # null
var_dump(Redis::exists('name')); # 0

Method not found라고 뜨지만 실행하면 잘됨

 

728x90
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함