SIR 메인처럼 24시간 인기 게시물 통합 (캐쉬 활용 예제 마지막) > 그누4 스킨

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

그누4 스킨

스킨의 저작권은 해당 스킨 제작자님께 있으며, 그누보드의 저작권과 다를 수 있습니다.
스킨 다운로드시 좋아요와 감사의 코멘트를 남기시면 제작자에게 큰 힘이됩니다. ^^y
그누보드와 관련이 있지만 스킨과 빌더가 아니면 플러그인 게시판에 올려주세요.

SIR 메인처럼 24시간 인기 게시물 통합 (캐쉬 활용 예제 마지막) 정보

최신글 SIR 메인처럼 24시간 인기 게시물 통합 (캐쉬 활용 예제 마지막)

첨부파일

_EX.1.0.2_hot2.zip (7.5K) 282회 다운로드 2013-01-02 16:24:41

본문

author : 유창화 (yoo chang hwa)
version : 1.0.2
regist : 2012-12-30
modify : 2013-01-01
comment : PHP 확장 라이브러리, PHP5 이상, UTF-8 전용
lisence : 상업적, 비상업적 사용 제한 없음, 배포, 수정 제한 없음, 단, 교육(강좌), 출판에는 동의 없이 사용할수 없음

db schema

//캐쉬
CREATE TABLE IF NOT EXISTS `ex_cache` (
  `cache_subject` varchar(50) NOT NULL,
  `cache_position` varchar(30) NOT NULL,
  `cache_seriaize` longtext NOT NULL,
  `cache_time` int(11) NOT NULL,
  PRIMARY KEY (`cache_subject`,`cache_position`),
  KEY `cache_position` (`cache_position`),
  KEY `cache_time` (`cache_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



### 설치 방법 ###
압축을 풀어서 ftp로 올립니다.
기존에 동일한 디렉토리, 파일이 있다면 덮어 씌웁니다.

디비에 아래 테이블을 추가합니다.

CREATE TABLE IF NOT EXISTS `ex_cache` (
  `cache_subject` varchar(50) NOT NULL,
  `cache_position` varchar(30) NOT NULL,
  `cache_seriaize` longtext NOT NULL,
  `cache_time` int(11) NOT NULL,
  PRIMARY KEY (`cache_subject`,`cache_position`),
  KEY `cache_position` (`cache_position`),
  KEY `cache_time` (`cache_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

기존에 있다면, 그대로 놔두면 됩니다.



### 적용방법 ###
같이 첨부된 sample.php 를 참고 하시면 됩니다.
추천
10

댓글 전체

캐쉬 활용 예제 마지막입니다.

여러 기준별 인기글과 통합형 인기글을 한꺼번에 처리 가능합니다.
캐쉬는 1개만 사용 됩니다.

통합형 인기글 정렬 순서는 'good, down, scrap, comment' 와 같이
순서를 정해주시면 됩니다.

높은 점수로 처줄 항목을 앞쪽에 배치하시면 됩니다.

당분간 바쁜 일로 올리지 못할것 같고
추후 다른 예제로 다시 찾아뵙도록 하겠습니다.
_EX::get_cache($check_time, $cache_subject, $cache_position) 활용법

캐쉬를 한페이지내에 아래와 같이
_EX::save_cache('s1', 'main', $cache_data1);
_EX::save_cache('s2', 'main', $cache_data2);
_EX::save_cache('s3', 'main', $cache_data3);
_EX::save_cache('s4', 'main', $cache_data4);
_EX::save_cache('s5', 'main', $cache_data5);
만들었다면

캐시를 불러올때 개별적으로 불러오면 모두 내부적으로 5번의 쿼리를 날리게 됩니다.

$cache_data1 = _EX::get_cache(600, 's1', 'main');
$cache_data2 = _EX::get_cache(600, 's2', 'main');
$cache_data3 = _EX::get_cache(600, 's3', 'main');
$cache_data4 = _EX::get_cache(600, 's4', 'main');
$cache_data5 = _EX::get_cache(600, 's5', 'main');

그러나.....

$cache = _EX::get_cache(600, '', 'main');
와 같이 사용한다면, 한번의 쿼리로 5개의 캐쉬 데이타를 모두 가져옵니다.
항상 감사합니다! 잘 쓰겠습니다.!

두가지 여쭤 봐도 될까요!

$cache_subject는 어떤 의미인지 알겠습니다. 그런데

$cahe_position 은 어떤 의미 인가요? 예제나 댓글에 보면, 'all', 'main' 이라고 되어있는데,

이것은 어떤 포지션을 나타내는 것인가요? 


또, html을 출력된 부분을 캐쉬에 담는 방법의 예제하나만 들어주시면 안될까요?

ob_start();
.....
$contents = ob_get_contents();
ob_end_clean();

_EX::save_cache('home', 'left', $contents);

이렇게 하면 될까요
네에 질문 감사합니다.

$cache_subject 는 이 캐쉬는 어떤 캐쉬를 의미하는가를 나타냅니다.
쓰기 나름이지만 hot_post10, new_post10 ..... 이런식으로요.

$cahe_position 는 어느 페이지에서 사용되는지 구분 하기 위한 것입니다.
보통 보면 인기글 같은 경우는 왼쪽이나 오른쪽에 딸려서 모든 페이지에서
나오기 마련인데 그런경우 'all' 과 같이 설정해놓으면
$cache = $cache = get_cache(600, '', 'all');
과 같은 방법으로
캐쉬를 가져올때 'all' 로 설정된 캐쉬를 한방에 모두 가져올수 있습니다.

특정 캐쉬들은 메인에서만 사용 된다면, $cahe_position 을 'main' 으로 다 생성하고
불러올때는 'main' 으로만 불러와서 배열형태로 한번에 사용할수 있습니다.

캐쉬의 목적은 여러가지가 있겟지만
가장 부하의 원인이 되는 많은 쿼리수를 줄이는 것과 처리과정을 생략하는데에 제일 큰 목적이 있습니다.
따라서 캐쉬를 가져올때도 많은 쿼리를 사용한다면 원래 목적에 위배되겟지요.

한마디로 다시 정의 하자면
$cahe_position 을 쓰는 목적은 캐쉬를 가져오기 위한 쿼리수를 줄이기 위한 용도입니다. 하나의 페이지에서 쓰여질 캐쉬를 한방에 다 가져오기 위한 것 입니다.

html  문서의 캐쉬 저장도 raineye 님처럼 그렇게 하시면 됩니다.


_EX::save_cache('home', 'left', $contents);
이렇게 저장하였다면
$cache = get_cache(600, 'home', 'left');
$contents = $cache['home']['left'][0];

이렇게 쓰시면 되겠습니다.

[0] 붙는 이유는 저장시 항상 배열로 만들어서 저장하기 때문에
배열이 아닌 경우에는 배열로 변환시 첫번째 데이타로 들어가기 때문입니다.


질문 감사합니다.
<?php

$check_time = 600;//600초, 10분
$cache_subject = 'home';
$cache_posion = 'left';
$cache = _EX::get_cache($check_time, $cache_subject, $cache_posion);

if(!is_array($cache[$cache_subject][$cache_posion])) {

    ob_start();
    .....
    $contents = ob_get_contents();
    ob_end_clean();

    _EX::save_cache($cache_subject, $cache_posion, $contents);

    echo $contents;
}
else {

    $contents = $cache[$cache_subject][$cache_posion][0];
    echo $contents;
}

?>
훌륭한 코드와

상세한 답변 너무 감사합니다  밑의 코드 예제도 너무 감사합니다.

저는 오래전에 완전 까막눈일때 부터 PHP를 유창화님께 다 배우는듯하네요~

다시 한번 감사드립니다
네에.. 제아이디로 검색하시면 관련된게 조금 있는데
순서대로 한번 보시면 조금 이해는 되지 않을까 싶습니다.

http://sir.co.kr/bbs/board.php?bo_table=g4_skin&sfl=mb_id,1&stx=dbckdghk

최근 게시물 최신 댓글 부터 보시면 될거 같습니다.
전부 연결된 내용입니다.
전체 5,853 |RSS
그누4 스킨 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT