티스토리 뷰
728x90
Predis vs PHPRedis
PHP의 대표적인 Redis 클라이언트
- Predis : Pure PHP로 개발됐음
- 장점 : composer로 다운로드 가능. 편리한 의존성 관리
- 단점 : PHPRedis 대비 성능 느림 → 대용량 트래픽 처리 아니면 체감하기 어려운 수준
- https://github.com/predis/predis
- PHPRedis : C언어로 만들어졌음.
- 장점 : 성능 우수
- 단점 : PECL, wget 등을 이용하여 모듈 개별 설치 필요
- https://github.com/phpredis/phpredis
=> 필자는 신규 서비스를 개발하는 중이어서 패키지 관리가 용이한 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
728x90
'Laravel' 카테고리의 다른 글
[Laravel/PHPUnit] beforeEach 역할의 setUp() (0) | 2022.10.31 |
---|---|
[Laravel/PHPUnit] 단위 테스트 시 A facade root has not been set 문제 해결하기 - Mockery (0) | 2022.10.26 |
[Laravel/PHPUnit] Feature Test vs Unit Test (2) | 2022.10.24 |
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MySQL
- 몽고디비
- phpUnit
- 백엔드
- mockery
- laravel 테스트
- redis
- 샤딩
- springboot
- NoSQL
- 샤드
- database
- 쿠버네티스
- devops
- index
- php
- kubernetes
- 도커
- 리눅스 컨테이너
- laravel
- mongoDB
- 분산처리
- 주니어개발자
- 대규모 데이터 처리
- pods
- k8s
- docker
- 라라벨
- java
- laravel 테스트코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함