그누보드5(아미나)용 redis 쿼리 캐시 플러그인

Amina Member PDS

아미나 테마, 스킨, 위젯 등 회원자료실

홈 > 회원포럼 > 회원자료실
회원자료실

그누보드5(아미나)용 redis 쿼리 캐시 플러그인

9c93cdfe0feb8461272beb93bf2e40fe_1536718243_2294.png
9c93cdfe0feb8461272beb93bf2e40fe_1536718246_2822.png
 



- redis 서비스를 이용하여 db 쿼리 캐시 플러그인입니다.

- 접속자가 많은 사이트나, 복잡한 쿼리를 많이 사용하는 사이트에서 성능을 향상시킬수 있는 솔루션입니다.

- 간단한 함수 사용만으로 사용할수 있습니다. 

 

1. 사전 내용

 - PHP 5.3 이상에서 테스트되었습니다. 5.2 이하 버전에선 오동작할수 있습니다.
 - 서버에 phpredis 가 설치되어 있어야 합니다. 
 - phpredis 설치방법은  http://blog.bongwork.com/archives/44 를 참조하세요.
 - common.php 파일에 redis 객체를 미리 생성하면, 접속시마다 생성하지 않음으로, 네트웍 리소스를 절약할수 있습니다.
   예제 
 try {
    $redis = new Redis();
    $redis->connect(REDIS_SERVER_IP, REDIS_SERVER_PORT, 5);
} catch( Exception $e) {
    echo $e->getMessage();
}

2. 디렉토리 구성 및 파일
 - /lib/RedisCache.class.php 메인 캐시용 클래스 
 - /extend/redis_cache_functions.php   쿼리 캐시 함수용 선언 함수파일
 - /redis_test.php  : 테스트용 php 파일
 - /README.txt

3. 설정방법
 - redis 서버가 로컬(127.0.0.1) 이 아닌 다른 서버에서 실행되는 경우 RedisCache.class.php 의 default_host와 default_port를 해당 서버정보로 변경해주세요.
 (보통 사용하지 않으나,  redis 서버의 auth 기능을 사용하고 있는 경우는 접속 코드에 auth 관련 코드를 추가해야 합니다.)

4. 사용방법
  - 압축을 푼 다음 RedisCache.class.php 와 redis_cache_functions.php 파일을 그누보드5(영카트5)의 lib와 extend 디렉토리로 업로드 합니다   - 첨부된 redis_test.php 를 작성하여 실행해봅니다. (관리자로 실행하면 디버깅 정보가 노출됩니다. 성능 확인가능)

5. 라이센스
  - GPL 을 따릅니다. 개인사이트 상업사이트에서 사용가능합니다.
  - 본인외에 타사이트에 위 소스를 게재할경우 사전 동의가 필요합니다.
  - 본 코드를 첨부한 솔루션을 판매하는 경우  따로 연락바랍니다.


 


,

25 Comments
15 달려라야옹 2018.12.17 06:12  
redis 섹션을 사용하면 phpmyadmin 접속이 불가한데..따로 수정해야하는곳이 있는가요?
5 나눗자료 2018.12.27 12:23  
remi repo로 설치한 php5.5 에 적용하였습니다.
감사합니다.

[root@zrbox ~]# yum install redis
[root@zrbox ~]# chkconfig redis on
[root@zrbox ~]# service redis start
Starting redis-server:                                    [  OK  ]
[root@zrbox ~]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> quit
[root@zrbox ~]# yum --enablerepo=remi,remi-php55 install php-pecl-redis

테스트: 새로고침시 value 숫자1씩 증가
<?php
$redis_host = "127.0.0.1";
$redis_port = 6379;
echo "<h1>redis 테스트<h1><br/>";
try {
    $redis = new Redis();
    $redis->connect($redis_host, $redis_port, 1000);
    $key = "mytest:first_key:incr_test"; //키분류는 :(콜론)을 찍는게 일반적
    $value = $redis->get($key);
    echo "value : ".$value."<br>";
    $redis->incr($key); //테스트를 위해 값증가
    $redis->expire($key, 3); //3초만 유지함.
} catch(Exception $e) {
    die($e->getMessage());
}
?>
3 Harry 2019.08.13 19:36  
아래는 Unix socket을 사용하는 예제입니다. (TCP port 사용시 보다 Unix socket을 사용하는 방법이 방문자가 많을 경우에 더욱 효과적입니다.)
아래 사이트 참조했습니다.
https://www.techandme.se/performance-tips-for-redis-cache-server/

아래 connect를 unix socket으로 변경해야 합니다.
$redis->connect($this->default_host, $this->default_port, 5);
--> $redis->connect($redis_socket); // Use Unix socket instead of TCP port

저는 unix sopcket을 아래와 같이 설정했습니다.
$redis_socket = "/var/run/redis/redis.sock";

그 밖에 Redis 튜닝방법은 위에 링크해드린 사이트를 참조하시면 됩니다.
8 우성군 05.17 20:51  
잘 적용되네요. 감사합니다.
11 태영 2019.12.20 12:17  
혹시 SIR 에 배포된 것과 아미나에 배포된것이 어떤 차이가 있나요?
아미나 사용하고 있는데 SIR 에서 배포되고 있는 것으로 적용하여 질문 드립니다.
4 명랑폐인 2019.12.20 17:55  
그누보드에 글써둔게 아까워서 같이 올린거에요.
같은거에요.
요즘 쓰시는분들이 많아서, 조금더 쉽게 정리해서 다시 올릴 예정입니다. 감사합니다.
11 태영 2019.12.21 11:54  
넹 답변 감사합니다 ~
1 소울팸 02.19 04:25  
8 우성군 05.17 19:11  
PHP-7.4에서도 잘 적용이 됩니다. 감사합니다.
4 명랑폐인 05.17 19:21  
잘된다니 다행이네요.
최근에 이를 응용한 코드들이 많아졌더라구요.. 저도 시간되면 업데이트를 한번 해봐야겠습니다.
  1. 별도 라이센스 표기가 없는 경우 다운받으신 자료는 비영리 사이트에서만 사용가능하며, 제작의뢰 또는 납품용으로도 사용할 수 없습니다.
  2. 또한 몰에서 판매하는 자료의 리소스로 활용 또는 단독판매가 불가능하고, 회원자료실에서 재배포도 불가능합니다.
  3. 포인트가 있는 경우 다운로드 후 2개월(60일) 동안은 다시 받더라도 재차감되지 않습니다.
제목
최근 글
최근 댓글
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand