<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[array_slice在用数据库做缓存的示例。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Mon, 09 Mar 2009 08:12:07 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	需求：显示大家的记录只显示前200条，第一页20条，共十页<br/><br/>数据库表结构：<br/><div class="code">mysql&gt; desc record_cache;<br/>+----------+------------+------+-----+---------+----------------+<br/>&#124; Field&nbsp;&nbsp;&nbsp;&nbsp;&#124; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; Null &#124; Key &#124; Default &#124; Extra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;<br/>+----------+------------+------+-----+---------+----------------+<br/>&#124; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; int(11)&nbsp;&nbsp;&nbsp;&nbsp;&#124; NO&nbsp;&nbsp; &#124; PRI &#124; NULL&nbsp;&nbsp;&nbsp;&nbsp;&#124; auto_increment &#124; <br/>&#124; mc_key&nbsp;&nbsp; &#124; varchar(2) &#124; NO&nbsp;&nbsp; &#124; MUL &#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; <br/>&#124; mc_value &#124; mediumtext &#124; NO&nbsp;&nbsp; &#124;&nbsp;&nbsp;&nbsp;&nbsp; &#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; <br/>+----------+------------+------+-----+---------+----------------+</div><br/><br/><div class="code">&lt;?php<br/><br/>class VMc<br/>&#123;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;private $db;<br/>&nbsp;&nbsp;public function __construct()<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;db = new MysqlPdo ( );<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;public function vMcSet($mcKey, $mcValue)<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$mcValue &#91;&#039;ctime&#039;&#93; = time ();<br/>&nbsp;&nbsp;&nbsp;&nbsp;$data &#91;&#039;mc_value&#039;&#93; = serialize ( $mcValue );<br/>&nbsp;&nbsp;&nbsp;&nbsp;$data &#91;&#039;mc_key&#039;&#93; = $mcKey;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($this-&gt;db-&gt;Insert ( &#039;record_cache&#039;, $data ))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;public function vMcGet($mcKey)<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$sql = &quot;SELECT mc_value FROM record_cache WHERE mc_key = &#039;$mcKey &#039;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$bRet = $this-&gt;db-&gt;Select ( $sql );<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($bRet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$res = $this-&gt;db-&gt;Fetch ();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($res)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$res = unserialize ( $res &#91;&#039;mc_value&#039;&#93; );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $res;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;public function flushCache()<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$db = $this-&gt;db-&gt;ConnectM ();<br/>&nbsp;&nbsp;&nbsp;&nbsp;$sql = &#039;TRUNCATE TABLE record_cache&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($db-&gt;query ( $sql ))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/>?&gt;</div><br/><br/><br/><br/><div class="code">&nbsp;&nbsp;public function GetRandomRecord(&amp;$current, $page = 1, $offset = 20)<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$total = 200;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;//////////////////////临时缓存//////////////////////////////<br/>&nbsp;&nbsp;&nbsp;&nbsp;$vMc = new VMc ( );<br/>&nbsp;&nbsp;&nbsp;&nbsp;$mcValues = $vMc-&gt;vMcGet ( $page );<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (! empty ( $mcValues ))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (time () - $mcValues &#91;&#039;ctime&#039;&#93; &lt;= 1800)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$current &#91;&#039;count&#039;&#93; = $mcValues &#91;&#039;count&#039;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset ( $mcValues &#91;&#039;count&#039;&#93;, $mcValues &#91;&#039;ctime&#039;&#93; );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach ( $mcValues as $k =&gt; $v )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (! empty ( $v ))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$current &#91;&#039;record&#039;&#93; &#91;$k&#93; = $v;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/////////////////////////////////////////////////////////////<br/>&nbsp;&nbsp;&nbsp;&nbsp;$current &#91;&#039;count&#039;&#93; = $total;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$start = $offset * ($page - 1);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$sql = &quot;select * from record&nbsp;&nbsp;where status = 0 order by ctime desc limit &quot; . $total;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$bRet = $this-&gt;db-&gt;Select ( $sql );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($bRet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//fetch the result<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$res = $this-&gt;db-&gt;FetchAll ();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//if mc is open put them into memcache<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;if (count ( $res ) &lt; 200)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$current &#91;&#039;count&#039;&#93; = count ( $res );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$tp = ceil ( count ( $res ) / $offset );<br/>&nbsp;&nbsp;&nbsp;&nbsp;$tmp = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for($i = 0; $i &lt; $tp; $i ++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cp = $i + 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$kstart = $i * $offset;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$pagerec = array_slice ( $res, $kstart, $offset );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$pagerec &#91;&#039;count&#039;&#93; = $current &#91;&#039;count&#039;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//////////////////////临时缓存//////////////////////////////<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($cp == 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($vMc-&gt;flushCache ())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmp = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($tmp == 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$vMc-&gt;vMcSet ( $cp, $pagerec );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//////////////////////////////////////////////////////////<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;if($this-&gt;mcobj)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;mcobj-&gt;set(&#039;RANDOM_RECORD_&#039; . $cp , $pagerec ,false ,60*30);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//set the return data<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($cp == $page)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$current &#91;&#039;record&#039;&#93; = array_slice ( $res, $start, $offset );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return true;<br/>&nbsp;&nbsp;&#125;</div>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] array_slice在用数据库做缓存的示例。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>