웹마스터 팁

지난번 PHP 뮤텍스 락 설치법(memcached 활용) 을 공유드렸습니다.

사용하면서 memcached 가 안좋은 면이 발견되어 redis 로 전환하였습니다.

* 문제 : 커맨드 라인에서 인터럽트 시 memcached 재기동하기 전까지 해당 세션은 락을 계속 갖고 있는 문제 (웹브라우저 인터럽트 시에는 문제 없었으나 동일현상이 웹브라우저에서 발생할 여지가 완전히 없는 것인지 불확실)

* 대체 : redis 를 활용할 경우 위 문제 해결 (인터럽트 시 지정한 겟 락 허용 시간 초과 시 락 릴리즈 확인)

 

<설치과정>

1. redis 설치

(참고) https://www.lesstif.com/pages/viewpage.action?pageId=23757257

# yum install redis

# chkconfig redis on

# service redis start

 

2. redis 설치 후 동작 확인

# redis-cli ping

PONG <= 이라고 뜨면 정상 작동 중

 

3. php - redis 연동 설치

(참고) https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=81804

# wget https://github.com/nicolasff/phpredis/zipball/master -O phpredis.zip 

# unzip phpredis.zip 

# cd phpredis-phpredis-.../ <= 생성된 디렉토리로 이동

# phpize 

# ./configure --with-php-config=/usr/bin/php-config <= php-config 위치를 기입

# make 

# make install 

=> 출력되는 위치 확인해 두세요. (redis 모듈 위치)

# vi /etc/php.ini

--------------------

[redis] 

extension=/.../redis.so  <= 위 make install 에서 확인된 redis 모듈 경로를 기입하세요.

session.save_handler = redis  <= 기존 session.save_handler 가 활성화 되어 잇다면 주석

session.save_path    = "tcp://127.0.0.1:6379"   <= 기존 session.save_path 가 활성화 되어 잇다면 주석

--------------------

# service httpd restart   <= 아파치 재시작

 

4. redis mutex 설치

(참고) https://github.com/php-lock/lock#phpredismutex

설치는 위 참고 사이트 참조하여 설치해 주세요.

 

5. 테스트

<?

require '위 4항 설치경로/vendor/autoload.php';

 

use malkusch\lock;

use malkusch\lock\mutex\PHPRedisMutex;

 

$redis = new Redis();

$redis->connect("localhost");

 

$mutex = new PHPRedisMutex([$redis], "balance", 30);   // <= (redis API 객체, 키, 타임아웃)

$para1 = "";

$mutex->synchronized(function () use ($para1) {   // <= 경합 진입

  echo "겟 락";

  sleep(10);

});   // <= 경합 탈출

echo "락 릴리즈";

?>

 

- 두 곳의 터미널에서 위 파일을 실행하면 경합이 정상적으로 이루어지는 것을 확인할 수 있습니다.

- 락을 잡고 있는 상태에서 인터럽트 발생 시 지정한 시간 이후 자동 락 릴리즈가 되는 것을 확인할 수 있습니다.

 

지금까지 redis 를 활용한 뮤텍스 포스팅 이었습니다.

 

 

 

제목 글쓴이 날짜
대부분 쉬운설치로 인해 홈페이지 빈 페이지가 뜨는 에러는.. CJM 2019.10.24
xe 기본회원가입품 연락처항목 공백&숫자 유효성검사 질문입니다. 해운거사2 2019.08.25
[주옥시리즈] 내글 모니터링, 작성글 앞으로 뺴기 [6] socialskyo 2013.10.18
회원가입품 연락처항목 공백잇을시 질문입니다. 해운거사2 2019.08.16
VSCODE에서 PRETTIER-PHP 사용하기 (중급자용) reactux 2019.07.29
관리자페이지의 회원목록에서 타회원들의 비밀번호 찾기 질문/답변 수정 가능하도록 하려면.. sejin7940 2019.07.03
XE 코어의 메일전송을 우리알림 모듈로 대체하는 방법 [30] file GG 2014.11.24
XE 1.5.1로 사이트 꾸미기 Part 2 [11] file 황비 2011.12.06
스케치북5 게시판 사용자정의에 색상 적용하기 file 아데나 2019.05.31
로그인 실패시 실패내역 쪽지와 메일 발송 되는걸 발송 안 되게 하려면.. sejin7940 2019.05.21
스크랩버튼 외부로 빼내기 [3] RainDrop+ 2011.01.04
1.11.3 업로드 패치 이후 업로드 오류 관련 우소푸 2019.04.21
게시판 목록에서 바로 첨부파일 다운로드하기 [6] file 요다빈치 2012.03.13
XE이전 작업순서 elancer 2019.03.28
무료이미지 다운 받을 수 있는 곳 elancer 2019.03.19
회원이 글 삭제하면 삭제하지 않고 글을 다른 게시판으로 보내기 [5] SCAC 2012.07.03
트윗버튼, 페어스북 좋아요 버튼, 카카오스토리 좋아요 버튼 태그 elancer 2019.03.11
XE용 CKEditor v4.9.2 (다크 스킨 수정) [4] file 큰돌♡ 2018.07.04
file 모듈 insertFile() manual_insert 시 디렉토리생성 에러 문제 해결 방법 onTrust 2019.01.02
모듈에서 무조건 JSON/XML 형식으로 출력하기 [1] Devel0per 2015.04.03