php 세션 저장소를 redis 로 바꾸어 본 후기.

HYEONG HWAN, MUN/ 6월 16, 2015/ 미분류/ 3 comments

일반적으로 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 를 선택해서 설치하였다.

설치방법은 사이트에 잘 나와있으니 따라하면 된다.

스크린샷 2015-06-16 오후 11.18.51

 

적용 직후 반응 속도가 대폭 개선되었다.

 


 

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. 속도 확인!

 

3 Comments

  1. 라엘 님, 혹시, 물리적으로 다른 두 서버 세션 공유 가능하게 할 줄 아세요?
    서버 환경은 아래와 같다고 합니다.

    ▒ A 서버:
    리눅스 버전: centos 5.6
    웹서버: 아파치 2.4
    PHP 버전: 5.6
    MySQL: 5.5
    빌더: 직접 모든 소스 제작

    ▒ B 서버:
    리눅스 버전: raspberry pi
    웹서버: 아파치
    PHP 버전: 5.6
    MySQL: 5.5
    빌더: 직접 모든 소스 제작

    1. 안녕하세요. 따로 의뢰는 받고 있지 않습니다.
      대신 구현하는 방법을 알려드릴께요.
      PHP 세션이 보통 /var/lib/php/sessions 에 저장이 되는데, 이 글(https://blog.lael.be/post/1387)을 읽고 세션폴더를 공유하도록 설정해보세요.
      참조하는 세션파일이 같아지므로, 서버간의 세션 공유가 이루어집니다.

      1. 자세한 답변 감사합니다. ^^

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*