laravel predis phpiredis 설치하기
Updated on
aws elasticache 를 이용하는데에 있어서,
laravel phpredis에서는 read, write를 자동으로 나눠주지 않는다.
하지만, aws redis는 cluster 또는 싱글 복제 모드만 지원한다…
아직까지, laravel 에서는 aws redis cluster 를 사용하기에는.. 뭔가 부족한거같다. 내 공부가 부족한걸수도.
이걸 나누기 위해서는, haproxy나 twemproxy 나 dynomite 를 사용하라고는 하는데…
이렇게 세팅해서 구성하면 더 좋을 수도 있겠지만, 그냥 나는 predis를 사용하기로 했다.
haproxy 를 사용하게 되면, 고가용성으로 또 서버를 구축해줘야하고, 그렇게 됬다가, haproxy가 문제 되면 아예 사용을 못하는 상황이 올 수도 있으니.
predis의 최대의 단점은 phpredis보다 속도가 10% ~ 100% 까지 loss가 있다는 거다.
아무튼, 설치 방법은
predis 를 설치하면되는데, 여기에 C로 작업된 phpiredis를 이용하여 성능 손실을 개선할 수 있다는 내용이 있다.
# Install RUN cd /usr/src/ \ && curl -fsSL https://github.com/redis/hiredis/archive/v1.0.2.tar.gz -o hiredis.tar.gz \ && mkdir -p hiredis \ && tar -xf hiredis.tar.gz -C hiredis --strip-components=1 \ && cd hiredis \ && make \ && make install \ && cp hiredis.h /usr/include/hiredis \ && ldconfig
이렇게 하여, hiredis를 설치해준다. (phpiredis는 이것을 필요로 함)
# Install phpiredis && cd /usr/src/php/ext \ && curl -fsSL https://github.com/nrk/phpiredis/archive/v1.1.tar.gz -o phpiredis.tar.gz \ && mkdir -p phpiredis \ && tar -xf phpiredis.tar.gz -C phpiredis --strip-components=1 \ && rm phpiredis.tar.gz \ && docker-php-ext-configure phpiredis --enable-phpiredis \ && docker-php-ext-install phpiredis \ && rm -rf phpiredis \
이렇게 하여금, 최신 버젼인 1.1을 설치해준다.
그러면 위와 같이 될 것이다.
'client' => env('REDIS_CLIENT', 'phpredis'), 'cluster' => true, 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), 'replication' => true, 'connections' => [ 'tcp' => 'Predis\Connection\PhpiredisStreamConnection', // PHP stream resources 'unix' => 'Predis\Connection\PhpiredisSocketConnection', // ext-socket resources ], ], 'clusters' => [ 'default' => [ // masters [ 'host' => env('REDIS_SHARD_1_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_SHARD_1_PORT', 6379), 'database' => 0, 'alias' => 'master', 'read_write_timeout' => 60, ], // slaves (replicas) [ 'host' => env('REDIS_SHARD_1_HOST_REPLICA', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_SHARD_1_PORT_REPLICA', 6379), 'database' => 0, 'read_write_timeout' => 60, ], ], ],
그 상태에서 위 database config 를 설정해주면 된다.
REDIS_CLIENT=predis
당연히 위 값을 설정해주어야만 된다.
그러면 잘 된다…
그런데 여기서 문제는, 아무리 테스트를 돌려봐도,
‘tcp’ => ‘Predis\Connection\PhpiredisStreamConnection’,
를 사용한거나 안한거나 속도 성능 개선에 전혀 달라지는게 없다는거다 !!
아마도 pipeline 형태로 쏘는 redis query 문에서는 성능 개선의 효과를 보는 것이 아닐까 ?
흠…