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

· 2013-01-02 (수) 16:24:41 · 8749 · 30
1.png
2.png
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 를 참고 하시면 됩니다.

첨부파일

1.png (12 KB)
0회 2013-01-02 16:24
_EX.1.0.2_hot2.zip (7.5 KB) 282회 2013-01-02 16:24
2.png (7.8 KB)
0회 2013-01-02 17:14
|

댓글 30개

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

여러 기준별 인기글과 통합형 인기글을 한꺼번에 처리 가능합니다.
캐쉬는 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개의 캐쉬 데이타를 모두 가져옵니다.
썸네일 관련 코드 어제 정말 잘 봤습니다.
스킨공개 감사드립니다. 서서서서서선추!!!
네에 감사합니다.!!!
감사히 잘쓰겠습니다!..
고맙습니다~!.
good!!!
네 감사합니다.
항상 감사합니다! 잘 쓰겠습니다.!

두가지 여쭤 봐도 될까요!

$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를 유창화님께 다 배우는듯하네요~

다시 한번 감사드립니다
고맙습니다.
최근글에서 기준점을 이렇게 쉽게 표현해 주시다니 많은 공부가 되었습니다..^^
네에 감사합니다. ^^
이게 하나 하나 잘 뜯어보면
공부하기 참 좋은 소스인데.......

많이 안봐서 안타깝습니다.
2013-01-03 (목) 13:19:57
사진부터 아이콘부터 다 바뀐모습이 더 굿. 사진보고 좋아요 눌러요 부끄
네에 감사합니다.
2013-01-04 (금) 18:19:12
안그래도 요쪽좀 한번 보려고 했었는데..
좋은스킨 올려주셔서 감사합니다 ^^
네에 감사합니다.^^
초보라 적용법을 아예 몰라 그냥 보고만가네요 ㅎㅎ,,아무리 글을 읽어도 제 수준에선 이해가 어렵네요,,ㅠ
네에.. 제아이디로 검색하시면 관련된게 조금 있는데
순서대로 한번 보시면 조금 이해는 되지 않을까 싶습니다.

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

최근 게시물 최신 댓글 부터 보시면 될거 같습니다.
전부 연결된 내용입니다.
감사합니다.
네에 고맙습니다
2013-06-13 (목) 16:18:29
감사합니다
2013-08-28 (수) 00:01:19
_EX::auto_include('hot');
이부분에서
Fatal error: Class '_EX' not found i
에러가 나네요 ㅠ
댓글을 작성하시려면 로그인이 필요합니다.

그누4 스킨

5,847건

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

+
분류 제목 글쓴이 날짜 조회
갤러리 13-01-03 조회 1.3만
최신글 13-01-03 조회 4,577
기타 13-01-03 조회 4,769
최신글 13-01-02 조회 1.1만
외부로그인 13-01-02 조회 8,276
최신글 13-01-02 조회 7,053
최신글 13-01-02 조회 8,750
최신글 13-01-02 조회 5,726
최신글 13-01-02 조회 7,588