db_cache 함수 사용법

불당   
   조회 11779   추천 0    

mysql에서 가장 큰 부담중의 하나가 join과 group by 인데

이런 것을 안쓰고 프로그램 하기는 참 어렵습니다.

 

그래서, 많은 경우 file_cache를 써서 문제를 우회하고 있는데

파일 캐쉬의 파일은~ 캐쉬가 안되고, 읽을 때마다 디스크에서 올라오고

꾸준히 가해지는 이런 디스크 access는 전반적으로 시스템을 힘들게 하고

실제로 파일 캐쉬를 구현하는 것도 상당히 복잡 합니다.

 

db_cache를 쓰면,

구현도 간단하고,

mysql의 cache 기능을 쓰기 때문에 아주 강력한성능이 나오게 됩니다.

 

사용법은

 

b4.lib.php를 extend 디렉토리에 넣고 (불당팩의 경우 lib/b4.lib.php를 업데이트)

아래와 같이 최신글 등의 부분을 호출하면 됩니다.

 

db_cache(cache_key, cache_time, cache_func)

 

cache_key : 임의로 지정하면 되는 구분 key. 예: gr_all, gr_my_all

cache_time : 캐쉬를 하는 시간

cache_func : 캐쉬를 만드는 함수(쌍따옴표로 반드시 둘러쳐야 합니다).

 

-----------------------

 

echo db_cache('gr_trash', 300, "latest(simple, gnu4_pack)");
echo db_cache('gr_turning', 300, "latest(simple, gnu4_turning)");

 

echo db_cache($gr_key, 300, "latest_group('simple', $row[gr_id], 12, 40)");

 

echo db_cache('all_my_latest', 300, "latest_group(simple, , 12, 40, , 전체내글의반응, '$g4[bbs_path]/new.php','my_datetime')");

echo db_cache('all_latest', 300, "latest_group(simple, , 12, 40, , 전체최근글, '$g4[bbs_path]/new.php')");

 

echo db_cache("www-main",1,"include(./test.php)");

------------------------

 

물론, 아래처럼 db를 만들고 config.php에 정의도 추가해야 합니다.

 

$g4['cache_table']          = $g4['table_prefix'] . "cache";              // db cache 테이블

 

CREATE TABLE IF NOT EXISTS `g4_cache` (
  `c_id` int(11) NOT NULL AUTO_INCREMENT,
  `c_name` varchar(255) NOT NULL,
  `c_text` text NOT NULL,
  `c_datetime` datetime NOT NULL,
  PRIMARY KEY (`c_id`),
  UNIQUE KEY `c_name` (`c_name`)
)

- opencode.co.kr -
아마존 AWS 1년 무료체험
쉽고 비용 효율적인 AWS 완전 관리형 DB, 지금 프리티어 1년 무료 체험하세요
제이에스페이지
PHP 웹프로그램 웹표준 퍼블리싱 PHP MySql HTML CSS jQuery
패스트캠퍼스 l 온라인 강의
그로스해킹 완전 정복 / 온라인 250개 강의 평생 수강강기회 ! 올인원 패키지
파워링크 AD   클릭초이스등록
별소녀 2010-07
안녕하세요~
db_cache를 써보고 싶은데요..
DB는 만들고 config.php에도 추가했구요.b4.lib.php를 extend에 잘 넣어두었는데..
사용법이 잘 이해가 안가서요.
영카트에서 카테고리몇개에 상품들을 캐쉬해보려고합니다.
어디에다가 어떤코드를 삽입해야하는지 잘 이해가 안가는데.
혹시 알려주실 수 있나요?
안된다고해도 감사합니다. (_ _)
불당 2010-07
사용법은 아주 쉽습니다.

영카트4의 경우 카테고리를 출력하는 함수가 있죠?
main_type1인가???
그함수를 db_cache 하면 됩니다.

상품 업데이트 주기가 빈번하지 않다면 메인의 경우
캐쉬를 해두면 속도를 많이 높일 수 있어요.
     
별소녀 2010-07
프로그램쪽은 잘 몰라서요..
메인에서 랜덤으로 상품을 뿌려주는게 있는데..
echo db_cache('test', 300, "rand()");
이런식으로 쓰는게 맞나요?
이걸 index.php에다가 썼는데 맞게 한건지요..
너무 몰라서 여쭙기도 그렇네요.
불당 2010-07
그럼 안되죠??? 램덤으로 상품을 뿌려주는 코드가 뭐죠?
db_cache는 프로그램을 수행해서 그 결과를 db에 넣어두는 기능입니다.
     
별소녀 2010-07
인덱스에서 코드는
<?
$list_mod  = "6";
$img_width  = "80";
$img_height = "80";
$td_width = (int)(100 / $list_mod);

$sql = " select *
  from $g4[yc4_item_table]
  where it_id <> '$it[it_id]' and it_use = '1'
  order by rand()
  limit 30 ";

$result = sql_query($sql);
$num = @mysql_num_rows($result);
if ($num)
include "$g4[shop_path]/maintype66.inc.php";
else
echo "이 상품과 관련된 상품이 없습니다.";
?>

이렇게 쓰구있구요..

maintype66.inc.php는
<?
for ($i=0; $row=sql_fetch_array($result); $i++) {
    if ($i > 0 && $i % $list_mod == 0) {
        echo "</tr>\n\n<tr>\n";
    }

    $href = "<a href='$g4[shop_path]/item.php?it_id=$row[it_id]' class=item>";
?>
    <td width="<?=$td_width?>%" align=center valign=top>
        <table width=98% cellpadding=1 cellspacing=0 border=0>
        <tr><td height=5></td></tr>
        <tr><td align=center><?=$href?><?=get_it_image($row[it_id]."_s", $img_width, $img_height)?></a></td></tr>
        <tr><td align=center><?=$href?><font size='2'><?=stripslashes($row[it_name])?></font></a></td></tr>
        <tr><td align=center><span class=amount><?=display_amount(get_amount($row), $row[it_tel_inq])?></span></td></tr>
        </table></td>
<?
/*
// 이미지 오른쪽에 구분선을 두는 경우 (이미지로 대체 가능)
    if ($i%$list_mod!=$list_mod-1)
        echo "<td width=1 bgcolor=#eeeeee></td>";
*/
}

// 나머지 td 를 채운다.
if (($cnt = $i%$list_mod) != 0)
    for ($k=$cnt; $k<$list_mod; $k++)
        echo "<td>&nbsp;</td>\n";
?>

이렇게 되어있습니다..
불당 2010-07
$g4[shop_path]/maintype66.inc.php 이거를 db_cache해야 하는데,
함수를 수행하는 것과 달리 include 하는 경우에는 잘 안될 수도 있습니다.

include "$g4[shop_path]/maintype66.inc.php";

db_cache('maintype66_key', 300, "include " . $g4[shop_path] . "/maintype66.inc.php;" )

안되는 경우는 쓸 수 없습니다.
된장같은 2010-08
오늘 이 게시물을 처음 봐서 해보았는데 잘 안되네요. ㅎㅎ 에러만 나고
최근 게시물에 대한 정확한 예제를 좀 부탁 드려요.
index 화면에 각 그룹마나 최신글을 가져 오려고 합니다.

현재 그룹 최신글 방법 <? echo latest_group('basic_main_gr_2-스킨', '02-그룹', '', '4-목록수', '43-제목길이', '', '', ''); ?>

그런데 위에서 알려주신 것을 어떻게 적용해야 할지를 모르겠어요. 말씀하신 디비랑 파일은 등록을 해 놨거든요.
겨우 물어물어서 ㅎㅎ
불당 2010-08
db_cache('maintype66_key', 300, "latest_group('basic_main_gr_2-스킨', '02-그룹', '', '4-목록수', '43-제목길이', '', '', '') ")
     
된장같은 2010-08
답변 감사 합니다. ^^ 다시 해보겠습니다. 좋은 하루 되시어용
네모맨 2010-09
적용해 보지는 않았지만.
캐시기능이면 일단 새로운 데이터를 캐싱할때까지는 랜덤이 안되는 걸로 알고 있습니다..
     
불당 2010-09
캐쉬생성 time이 있습니다. 랜덤으로 메인 최신글의 데이터가 잘 바뀝니다.


제목Page 2/4
2010-11   9443   불당
2010-10   7637   불당
2010-10   7393   불당
2010-06   7865   불당
2010-06   10718   불당
2010-04   6164   불당
2010-04   5649   불당
2010-04   11780   불당
2009-12   5858   불당
2009-12   8660   불당
2009-11   5993   불당
2009-11   4971   불당
2009-08   6578   불당
2009-08   5027   불당
2009-08   5133   불당
2009-08   5048   불당
2009-08   5940   불당
2009-07   5786   불당
2009-06   4379   불당
2009-04   4875   불당