웹마스터 팁
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!');
}
?>
댓글 1
제목 | 글쓴이 | 날짜 |
---|---|---|
EXIF 메타정보 필요하신 분 있으시면 | forest535 | 2018.04.09 |
게시판 본문읽기에서 컨텐츠 이미지와 텍스트 분리하여 출력하기 | forest535 | 2018.04.09 |
관리권한 없이도 특정그룹에게 비밀글 열람 및 댓글작성 권한 부여하는 방법 ( 부운영자등을 위해) | sejin7940 | 2018.04.26 |
[PHP] 이름 및 연락처 마스킹 처리 [1] | ppumweb | 2018.05.21 |
단축url API 사용하시는 분들... | 미스터강 | 2018.06.01 |
게시판글 엑셀 파일 보내기 php7용 | 황금날개 | 2018.06.05 |
도메인 변경 또는 설치 폴더 변경시 이미지 주소변경하기 | 해피정닷컴 | 2018.06.08 |
XE용 CKEditor v4.9.2 (다크 스킨 수정) [4] | 큰돌♡ | 2018.07.04 |
DB를 손쉽게 관리 [1] | EISOFT | 2018.07.15 |
Code-Highlighter 3.0.83 가로 스크롤바를 어디론가 보내 버리고 싶으신 분. | 달빛늑대 | 2018.07.16 |
Google 스프레드시트에서 구글 번역으로 XE 다국어 내용 만들기(Lang.xml 용도) | 달빛늑대 | 2018.07.17 |
act로 다른 페이지 보여주기 [1] | 이온디 | 2018.07.25 |
다른 서버 간 서브도메인 쿠키 공유 | 에이트 | 2018.08.04 |
썸네일 방식으로 이미지 원본 주소 가져오기 | 에이트 | 2018.08.22 |
PHP 뮤텍스 락 설치법(memcached 활용) [1] | 에이트 | 2018.09.03 |
PHP 뮤텍스 락 설치법(redis 활용) | 에이트 | 2018.09.11 |
무료 psd, html 탬플릿, 아이콘 사이트공유합니다. | 허허길드짱 | 2018.11.27 |
file 모듈 insertFile() manual_insert 시 디렉토리생성 에러 문제 해결 방법 | onTrust | 2019.01.02 |
트윗버튼, 페어스북 좋아요 버튼, 카카오스토리 좋아요 버튼 태그 | elancer | 2019.03.11 |
무료이미지 다운 받을 수 있는 곳 | elancer | 2019.03.19 |