<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://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>https://jackxiang.com/post//</link>
<title><![CDATA[memcached+Mysql(主从) ]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sun, 24 Jan 2010 06:11:29 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<a href="https://jackxiang.com/attachment.php?fid=55" target="_blank"><img src="https://jackxiang.com/attachment.php?fid=55" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><div class="code"><br/>/*<br/>index.php&nbsp;&nbsp; 程序入口，用来构造sql（如查询，更新）<br/>config.php&nbsp;&nbsp;配置参数（memcache,mysql）<br/>init.php&nbsp;&nbsp;&nbsp;&nbsp;封装memcached操作(memcache连接，设置,获取)<br/>mysqli.php&nbsp;&nbsp;封闭mysql操作(mysql主连接，mysql从连接,mysql主更新,mysql从查询)<br/>*/<br/><br/>index.php<br/>&lt;?php<br/>require &#039;init.php&#039;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//加载init.php<br/>$mem = new Memcached;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//建立memcached对象,对象为$mem<br/>/*<br/>$mem-&gt;set(&#039;en_xx&#039;,&#039;bucuo&#039;,0,30); //测试连接memcached，用来调试很不错。<br/>echo($mem-&gt;get(&#039;en_xx&#039;));<br/>$mem-&gt;set(&#039;cn_jjyy&#039;,&#039;wokao&#039;,0,30);<br/>echo($mem-&gt;get(&#039;cn_jjyy&#039;));<br/>*/<br/><br/>require &#039;mysqli.php&#039;;<br/>$sq = new Mysql;&nbsp;&nbsp;&nbsp;&nbsp;<br/>//下面这两个sql是人为构造的，这也可以做成一个接口&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>$sql = &quot;Select * from traffic&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>//$sql = &quot;insert into traffic(id,acct_mth,amount) values(14,14,46)&quot;;<br/>//进行判断，如果sql语句中有头有select(不区分大小写)<br/>if(preg_match (&quot;/^select/i&quot;, $sql))&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$mdsql = md5($sql);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(!$result=$mem-&gt;get(&#039;cn_&#039;.$mdsql))&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这里选择的是cn memcached，大家也可以根据需求在前面做个条件来将数据存取放入到另一个memcached中。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $result = $sq-&gt;fetArray($sql); //查询是 从mysql<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach($result as $var)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $var&#91;&#039;amount&#039;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mem-&gt;set(&#039;cn_&#039;.$mdsql,$result,0,600); //添加到 名为cn的memcached 服务器<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;else&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach($result as $var)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $var&#91;&#039;amount&#039;&#93;.&quot;&lt;br&gt;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;else&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$sq-&gt;mquery($sql);&nbsp;&nbsp;&nbsp;&nbsp; //更新是 主mysql<br/>&#125;<br/><br/>?&gt;<br/></div><br/><br/><br/>config.php<br/><div class="code"><br/>&lt;?php<br/>$memcached = array(<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#039;cn&#039;=&gt;array(&#039;192.168.x.y&#039;,11211),<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#039;en&#039;=&gt;array(&#039;192.168.y.x&#039;,11211)<br/>&nbsp;&nbsp;&nbsp;&nbsp; );<br/>$mysql&nbsp;&nbsp;&nbsp;&nbsp;= array(<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#039;master&#039;=&gt;array(&#039;x&#039;,&#039;root&#039;,&#039;&#039;,&#039;test&#039;),<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#039;slave_1&#039;=&gt;array(&#039;y&#039;,&#039;root&#039;,&#039;&#039;,&#039;test&#039;),<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#039;slave_2&#039;=&gt;array(&#039;z&#039;,&#039;root&#039;,&#039;&#039;,&#039;test&#039;) //可以灵活添加多台从服务器<br/>&nbsp;&nbsp;&nbsp;&nbsp; );<br/>?&gt;<br/></div><br/><br/><br/><br/>init.php<br/><br/><div class="code"><br/>&lt;?php<br/>class Memcached<br/>&#123;<br/>private $mem;<br/>public $pflag=&#039;&#039;; // memcached pconnect tag<br/>&nbsp;&nbsp;&nbsp;&nbsp;private function memConnect($serkey)&#123;&nbsp;&nbsp;&nbsp;&nbsp; //建立memcached连接，这些都很容易理解<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require &#039;config.php&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$server = $memcached;&nbsp;&nbsp;//$memcached是cn,en的数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;mem = new Memcache;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$link = !$this-&gt;pflag ? &#039;connect&#039; : &#039;pconnect&#039; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;mem-&gt;$link($server&#91;$serkey&#93;&#91;0&#93;,$server&#91;$serkey&#93;&#91;1&#93;) or $this-&gt;errordie(&#039;memcached connect error&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public function set($ser_key,$values,$flag=&#039;&#039;,$expire=&#039;&#039;)&#123;&nbsp;&nbsp;//设置获取数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;memConnect($this-&gt;tag($ser_key));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($this-&gt;mem-&gt;set($ser_key,$values,$flag,$expire)) return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public function get($ser_key)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;memConnect($this-&gt;tag($ser_key));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if($var=$this-&gt;mem-&gt;get($ser_key)) return $var;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private function tag($ser_key)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $tag=explode(&#039;_&#039;,$ser_key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $tag&#91;0&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private function errordie($errmsg)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die($errmsg);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>/*&nbsp;&nbsp;这段函数是我用来在类中做调试用的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;public function show($messages)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo $messages;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>*/<br/>&#125;<br/>?&gt;<br/></div><br/><br/><br/><br/><br/>mysqli.php<br/><div class="code"><br/>&lt;?php<br/>class Mysql<br/>&#123;<br/>/* 这段函数是我用来调试的<br/>public function show($messages)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var_dump($messages);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>*/<br/>private&nbsp;&nbsp; $mysqlmaster;<br/>private&nbsp;&nbsp; $myssqlslave;<br/><br/>public function __construct()&#123;&nbsp;&nbsp; //构造函数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; require &#039;config.php&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msg = $mysql;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//$mysql是master,slave_1,slave_2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;mysqlmaster = new mysqli($msg&#91;&#039;master&#039;&#93;&#91;0&#93;,$msg&#91;&#039;master&#039;&#93;&#91;1&#93;,$msg&#91;&#039;master&#039;&#93;&#91;2&#93;,$msg&#91;&#039;master&#039;&#93;&#91;3&#93;); //master mysql<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;mysqlslave = $this-&gt;autotranscat($msg); // slave mysql<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(mysqli_connect_errno())&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Connect failed: %s&#92;n&quot;,mysqli_connect_error());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!$this-&gt;mysqlmaster-&gt;set_charset(&quot;latin1&quot;) &amp;&amp; !$this-&gt;mysqlslave-&gt;set_charset(&quot;latin1&quot;))&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(&quot;set charset error&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/>private function autotranscat($mysql)&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这段函数的作用是获取从服务器序列号，如1,2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session_start();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动会话<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $_SESSION&#91;&#039;SID&#039;&#93;!=0 &#124;&#124; $_SESSION&#91;&#039;SID&#039;&#93;=0;&nbsp;&nbsp;//如果不为0，就不做赋值操作(那第一次访问的话，肯定会做赋值操作的)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($_SESSION&#91;&#039;SID&#039;&#93; &gt;=count($mysql)-1) $_SESSION&#91;&#039;SID&#039;&#93; = 1;&nbsp;&nbsp;//上面那个动作是为这个动作准备的<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else $_SESSION&#91;&#039;SID&#039;&#93;++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$key = &#039;slave_&#039;.$_SESSION&#91;&#039;SID&#039;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new mysqli($mysql&#91;$key&#93;&#91;0&#93;,$mysql&#91;$key&#93;&#91;1&#93;,$mysql&#91;$key&#93;&#91;2&#93;,$mysql&#91;$key&#93;&#91;3&#93;);<br/>&#125;<br/><br/>public function mquery($sql)&#123; //mysql主 insert update<br/>if(!$this-&gt;mysqlmaster-&gt;query($sql))&#123;<br/>&nbsp;&nbsp; return false;<br/>&#125;<br/>&#125;<br/><br/>public function squery($sql)&#123;&nbsp;&nbsp; //mysql从 查询<br/>if($result=$this-&gt;mysqlslave-&gt;query($sql))&#123;<br/>&nbsp;&nbsp; return $result;<br/>&#125;else&#123;<br/>&nbsp;&nbsp; return false;<br/>&#125;;<br/>&#125;<br/>public function fetArray($sql)&#123;&nbsp;&nbsp;//mysql从 查询 入口<br/>if($result=$this-&gt;squery($sql))&#123;<br/>&nbsp;&nbsp; while($row=$result-&gt;fetch_array(MYSQLI_ASSOC))&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$resultraa&#91;&#93; = $row;<br/>&nbsp;&nbsp; &#125;;<br/>&nbsp;&nbsp; return $resultraa;<br/>&#125;<br/>&#125;<br/>&#125;<br/>?&gt;<br/></div><br/>
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] memcached+Mysql(主从) ]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>