db_cache 함수 사용법

불당   
   조회 11395   추천 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 클라우드 데이터베이스, 저렴한 비용, 쉬운 관리, 지금 1년무료체험 신청!
제이에스페이지
PHP 웹프로그램 웹표준 퍼블리싱 PHP MySql HTML CSS jQuery
MYSQL 교보문고
MYSQL, 신간, 베스트셀러 업데이트, 최대1만원 할인+바로드림 서비스!
파워링크 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   9230   불당
2010-10   7452   불당
2010-10   7222   불당
2010-06   7685   불당
2010-06   10432   불당
2010-04   5972   불당
2010-04   5482   불당
2010-04   11396   불당
2009-12   5696   불당
2009-12   8405   불당
2009-11   5777   불당
2009-11   4808   불당
2009-08   6405   불당
2009-08   4873   불당
2009-08   4965   불당
2009-08   4842   불당
2009-08   5759   불당
2009-07   5596   불당
2009-06   4227   불당
2009-04   4709   불당