php 세션 저장소를 redis 로 바꾸어 본 후기.
일반적으로 PHP 세션은 파일 형태로 다루어지고,
/var/lib/php/sessions/
위치에 serialize 되어 저장됩니다.
어떤 웹 프로그램의 속도가 느려서 디버깅을 했었는데, 느린 부분이 session_start() 구문이었다.
저 한 줄 실행하는데, 1.2초~ 2.5초가 걸리더라.
하나의 PHP 파일에 대하여, 동시에 20개의 POST 요청을 하는 프로그램이었다.
- 세션 구문이 느리니까 개선을 위하여 redis 를 설치해 보았다.
공식사이트는 이곳 (http://redis.io/download) 이다.
PHP 연동 파일은 http://redis.io/clients#php 에서 찾아볼 수 있다.
라엘이는 phpredis 를 선택해서 설치하였다.
설치방법은 사이트에 잘 나와있으니 따라하면 된다.
적용 직후 반응 속도가 대폭 개선되었다.
1. redis 서버 설치
# apt install redis
redis-server 가 설치된다.
2. 확인
# service redis status
3. PHP 의 session handler 로 사용하기 위해 PHP 모듈 설치
# apt-cache search redis | grep php
# apt install php-redis
4. session handler 를 redis 로 설정
https://github.com/phpredis/phpredis#installingconfiguring 을 보고 설정함
나는 php-fpm 에서 설정했다.
php_value[session.save_handler] = redis php_value[session.save_path] = "tcp://localhost:6379?weight=1"
5. 실행중인 PHP 를 재시작
나는 php7.3-fpm 을 재시작했음. Apache 사용자라면 apache2 서비스를 재시작하면 된다.
6. 속도 확인!
라엘 님, 혹시, 물리적으로 다른 두 서버 세션 공유 가능하게 할 줄 아세요?
서버 환경은 아래와 같다고 합니다.
▒ A 서버:
리눅스 버전: centos 5.6
웹서버: 아파치 2.4
PHP 버전: 5.6
MySQL: 5.5
빌더: 직접 모든 소스 제작
▒ B 서버:
리눅스 버전: raspberry pi
웹서버: 아파치
PHP 버전: 5.6
MySQL: 5.5
빌더: 직접 모든 소스 제작
안녕하세요. 따로 의뢰는 받고 있지 않습니다.
대신 구현하는 방법을 알려드릴께요.
PHP 세션이 보통 /var/lib/php/sessions 에 저장이 되는데, 이 글(https://blog.lael.be/post/1387)을 읽고 세션폴더를 공유하도록 설정해보세요.
참조하는 세션파일이 같아지므로, 서버간의 세션 공유가 이루어집니다.
자세한 답변 감사합니다. ^^