웹마스터 팁

지난번 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 를 활용한 뮤텍스 포스팅 이었습니다.

 

 

 

제목 글쓴이 날짜
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용 file 황금날개 2018.06.05
도메인 변경 또는 설치 폴더 변경시 이미지 주소변경하기 file 해피정닷컴 2018.06.08
XE용 CKEditor v4.9.2 (다크 스킨 수정) [4] file 큰돌♡ 2018.07.04
DB를 손쉽게 관리 [1] EISOFT 2018.07.15
Code-Highlighter 3.0.83 가로 스크롤바를 어디론가 보내 버리고 싶으신 분. 달빛늑대 2018.07.16
Google 스프레드시트에서 구글 번역으로 XE 다국어 내용 만들기(Lang.xml 용도) file 달빛늑대 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