웹마스터 팁
PHP 뮤텍스 락 설치법(memcached 활용)
2018.09.03 10:59
최근 경합 처리를 해야하는 업무가 있어 이를 해결한 방법 공유드리겠습니다.
(참조 자료)
1. http://wordpressxe.tistory.com/8
2. https://github.com/arvenil/ninja-mutex
(유의사항)
기존 운영되는 서버에 설치 시 세션 관련 문제가 발생할 수 있으니 설치 시 유의해 주세요.
ex) phpMyAdmin 접속 안될 수 있음. (하기 방식으로 phpMyAdmin 접속 해소 가능)
-------------------------------------------
config.inc.php 최상단 하기 문구 삽입
ini_set('session.save_path', '');
ini_set('session.save_handler', 'files');
-------------------------------------------
기 운영되고 있는 서버에 설치보다는 별도 경합이 많이 발생하는 프로세스 처리 서버에 설치 시도하여 충분한 테스트 및 검증 후 도입하세요.
1. Memcached 설치
- 먼저 Memcached를 설치하기전 libevent를 설치 합니다. (libvirt를 설치할때 의존성 패키지들도 같이 설치 됩니다.)
# yum install libvirt
- Memcached 설치
# yum install memcached
- Memcached PHP 확장 모듈 설치 (보통 위 설치하면 아래 두개는 이미 설치되었다고 나옴)
# yum install php php-pecl-memcache <-memcache용
# yum install php php-pecl-memcached <-memcached용
- Memcached 설정 (보통 기본값으로 아래 내용이 작성되어 있음)
# vi /etc/sysconfig/memcached
-----------------------
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
-----------------------
- 재부팅시 자동시작 설정
# chkconfig memcached on
- Memcached 시작
# service memcached start
- Memcached실행 및 작동 확인
# echo stats | nc localhost 11211
- php.ini 파일 변경
# vi /etc/php.ini
-------------------------------
[Session]
session.save_handler = files
...
session.save_path = "/var/lib/php/session"
이부분을
-------------------------------
[Session]
session.save_handler = memcached
...
session.save_path = "127.0.0.1:11211"
이렇게 변경해 줍니다.
- 아파치 재시작
* 웹서버를 재시작 해줘야 설정값이 적용 됩니다.
# service httpd restart
2. 닌자 뮤텍스 모듈 설치 (아래 Installation 참고)
https://github.com/arvenil/ninja-mutex
* 유의사항1 : root 계정으로 하면 안됨. 일반 사용자 계정으로 해야 함.
* 유의사항2 : 설치 시 Composer 부분 두 문구만 실행하면됨. Running tests, Something doesn't work 는 안해도 됨
Usage 부분의 Mutex 로 테스트 해보면 됨.
3. 테스트
test.php 를 생성하여 하기 입력.
<?php
require '../libs/ninja-mutex/vendor/autoload.php';
use NinjaMutex\Lock\MemcacheLock;
use NinjaMutex\Mutex;
$memcache = new Memcache();
$memcache->connect('127.0.0.1', 11211);
$lock = new MemcacheLock($memcache);
$mutex = new Mutex('very-critical-stuff', $lock);
if ($mutex->acquireLock(10000)) {
// Do some very critical stuff
sleep(10);
// and release lock after you finish
$mutex->releaseLock();
} else {
throw new Exception('Unable to gain lock!');
}
?>
제목 | 글쓴이 | 날짜 |
---|---|---|
최신이미지 추출시 사진 아래 내용들 중간 정돈 방법 [4] | 팔공산 | 2007.08.23 |
상단메뉴 개수를 지정한 만큼만 보여주고자 할 경우 [9] | 똑디 | 2007.08.23 |
여러 개의 메뉴를 달아보자! [5] | 고라리 | 2007.08.23 |
제로보드 관리자 레벨이 관리자 레벨로 안나올때 [5] | 나무넷 | 2007.08.23 |
위지웍에디터가 갑자기 작동을 안할때 | 팔공산 | 2007.08.23 |
w3c.org의 웹페이지 유효성 검사기 | 바람처럼831 | 2007.08.24 |
(달력/Archive 문제해결법) 날짜로 검색하는 것이 제대로 안될때 [8] | 베니 | 2007.08.25 |
확장변수 [2] | 다케루 | 2007.08.25 |
0.1.1 패치하시면 가입시 기본 회원 그룹 선택해야해요. [2] | 다케루 | 2007.08.26 |
로그인 불가 - APM 관리자일 때 (일반적인 경우 아님) [3] | Sx3 | 2007.08.26 |
플래쉬 화일을 헤더와 푸터에 넣어보기 [11] | choi2007 | 2007.08.27 |
분류(카테고리) 색상 지정하기. [12] | 송암 | 2007.08.27 |
올블로그에서 제로보드가 깨질때.. [1] | 스컬리지금어디야 | 2007.08.27 |
홈페이지에 게시판을 iframe, include로 이용하시는분들 | 느까끼 | 2007.08.27 |
썸네일 크기 줄이는 법 [6] | 느까끼 | 2007.08.27 |
템플릿 컴파일 파일 지우기 귀찮을때 [1] | 젬스송 | 2007.08.28 |
최신댓글에 닉네임 출력하기... [5] | 똑디 | 2007.08.28 |
템플릿 파일에서 일반 PHP 코드 사용 [3] | 화니군 | 2007.08.28 |
게시판 분류(카테고리)를 텍스트&이미지로 나열 하기 [11] | Simulz | 2007.08.29 |
xe_layout 을 자신의 웹 첫화면과 연결 [2] | justrue | 2007.08.29 |
memcached 활용 방법은 인터럽트 발생 시 락 릴리즈가 안되는 문제가 있으니
본 방법보다는 아래 redis 활용 방법을 이용해 주세요.
https://www.xpressengine.com/tip/23275528