웹마스터 팁
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!');
}
?>
제목 | 글쓴이 | 날짜 |
---|---|---|
file 모듈 insertFile() manual_insert 시 디렉토리생성 에러 문제 해결 방법 | onTrust | 2019.01.02 |
모듈에서 무조건 JSON/XML 형식으로 출력하기 [1] | Devel0per | 2015.04.03 |
새글/업데이트/이미지/동영상/첨부파일 아이콘 없애기 [18] | 老姜君 | 2008.11.21 |
무료 psd, html 탬플릿, 아이콘 사이트공유합니다. | 허허길드짱 | 2018.11.27 |
act로 다른 페이지 보여주기 [1] | 이온디 | 2018.07.25 |
단축url API 사용하시는 분들... | 미스터강 | 2018.06.01 |
확장변수값 계산하여 게시판 리스트에 출력하기(총계 게시판) [1] | klaist | 2009.11.30 |
PHP 뮤텍스 락 설치법(memcached 활용) [1] | 에이트 | 2018.09.03 |
PHP 뮤텍스 락 설치법(redis 활용) | 에이트 | 2018.09.11 |
위젯 가운데 정렬 하는법 [3] | 불금 | 2015.07.05 |
요즘 제가 jquery 웹앱 솔루션을 개발했습니다. [2] | 안드류KIM | 2018.04.03 |
썸네일 방식으로 이미지 원본 주소 가져오기 | 에이트 | 2018.08.22 |
다른 서버 간 서브도메인 쿠키 공유 | 에이트 | 2018.08.04 |
DB를 손쉽게 관리 [1] | EISOFT | 2018.07.15 |
CKEditor 이용시 몇가지 유용한 설정 [11] | prologos | 2015.05.02 |
Google 스프레드시트에서 구글 번역으로 XE 다국어 내용 만들기(Lang.xml 용도) | 달빛늑대 | 2018.07.17 |
Code-Highlighter 3.0.83 가로 스크롤바를 어디론가 보내 버리고 싶으신 분. | 달빛늑대 | 2018.07.16 |
[수정]알림센터 Lite에 메일발송 기능을 추가하기 [11] | 매실茶 | 2013.11.25 |
고정도메인 host 변경하기 | 해피정닷컴 | 2016.03.11 |
도메인 변경 또는 설치 폴더 변경시 이미지 주소변경하기 | 해피정닷컴 | 2018.06.08 |
memcached 활용 방법은 인터럽트 발생 시 락 릴리즈가 안되는 문제가 있으니
본 방법보다는 아래 redis 활용 방법을 이용해 주세요.
https://www.xpressengine.com/tip/23275528