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

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

어떤 웹 프로그램의 속도가 느려서 디버깅을 했었는데, 느린 부분이 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

 

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

세션의 속도가 개선된 후에, 2번째로 시간을 오래 소비하는 요인을 찾았고 그것은 어떤 SQL 구문이었다.

해당 SQL 구문을 개선한 후에 만족할 만한 반응속도를 얻었다.

 

이상한 점은 그 후에 file session hander 로 바꾸어도 빠른 속도가 나오더라는 것이다.

 

최종적으로 redis session 과 file session 의 속도차이는 거의 나지 않았다.

- 반응속도가 만족스러워져서 redis 의 효율을 측정하고자 했는데 효율이 거의 없었음. (속도 개선이 있기는 함)

 

최종결론 : 느린 쿼리세션 생성(session_start) 시간에 영향을 미칠수도 있다는 것을 깨닳았고,

올바르게 작성된 쾌적한 PHP 환경에서 redis 세션으로 바꾼다고 해서 속도향상이 크게 일어나지는 않는 것을 알았음.

 

현재는 다시 file 세션으로 사용하고 있다.

 

다만 나중에, 다중 서버 환경에서 세션공유를 구현하려고 한다면 redis 를 사용할 것 같다.

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. 자세한 답변 감사합니다. ^^

홈짱에게 댓글 남기기 댓글 취소

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

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>
*
*