多memcached 和 mysql 主从 环境下PHP开发: 代码详解
时间:2008-01-11
来源:互联网

所以写下东西发泄下. 一般的大站通常做法是 拿着内存当数据库来用(memcached). 和很好的读 写分离 备份机制 (mysql 的主从)
在这样的环境下我们怎么进行PHP开发呢. 本人不太会讲话.所以还是帖代码吧.
刚在linux 的 VIM 里写的一个 demo 调试通过. 也同时希望大家拍砖 , 使用PHP5 写的. PHP4写出来怕大家说我落后了
PHP代码:
<?php
$memcached = array( //用memcached 的 多 进程模拟 多台memcached 服务器 cn en 为 内存服务器名
'cn'=>array('192.168.254.144',11211),
'en'=>array('192.168.254.144',11212)
);
$mysql = array( // mysql 的主从 我的环境是 : xp 主 linux 从 mysql 5 php5
'master'=>array('192.168.254.213','root','1','mydz'),
'slave_1'=>array('192.168.254.144','root','1','mydz') //可以灵活添加多台从服务器
);
?>
PHP代码:
<?php
class Memcached
{
private $mem;
public $pflag=''; // memcached pconnect tag
private function memConnect($serkey){
require 'config.php';
$server = $memcached;
$this->mem = new Memcache;
$link = !$this->pflag ? 'connect' : 'pconnect' ;
$this->mem->$link($server[$serkey][0],$server[$serkey][1]) or $this->errordie('memcached connect error');
}
public function set($ser_key,$values,$flag='',$expire=''){
$this->memConnect($this->tag($ser_key));
if($this->mem->set($ser_key,$values,$flag,$expire)) return true;
else return false;
}
public function get($ser_key){
$this->memConnect($this->tag($ser_key));
if($var=$this->mem->get($ser_key)) return $var;
else return false;
}
private function tag($ser_key){
$tag=explode('_',$ser_key);
return $tag[0];
}
private function errordie($errmsg){
die($errmsg);
}
}
?>

在memcached 的多服务器上. 我的实现思路是这样的: 在把信息添加到 内存服务器的时候.我选择了手工设置添加到那个服务器.而不用传统的根据ID自动分配.
这样可以更灵活点.
以内存服务器名 为表示 比如 存 $arr 这个信息到 en 这台 内存服务器 我就这样写 $mem->set('en_'.$arr); 明白了吧
PHP代码:
<?php
class Mysql
{
private $mysqlmaster;
private $myssqlslave;
private static $auid=0;
public function __construct(){
require 'config.php';
$msg = $mysql;
$this->mysqlmaster = new mysqli($msg['master'][0],$msg['master'][1],$msg['master'][2],$msg['master'][3]); //master mysql
$this->mysqlslave = $this->autotranscat($msg); // slave mysql
if(mysqli_connect_errno()){
printf("Connect failed: %s\n",mysqli_connect_error());
exit();
}
if(!$this->mysqlmaster->set_charset("latin1") && !$this->mysqlslave->set_charset("latin1")){
exit("set charset error");
}
}
private function autotranscat($mysql){
session_start();
$_SESSION['SID']!=0 || $_SESSION['SID']=0 ;
if($_SESSION['SID'] >=count($mysql)-1) $_SESSION['SID'] = 1;
else $_SESSION['SID']++;
$key = 'slave_'.$_SESSION['SID'];
echo($_SESSION['SID']);
return new mysqli($mysql[$key][0],$mysql[$key][1],$mysql[$key][2],$mysql[$key][3]);
}
public function mquery($sql){ //insert update
if(!$this->mysqlmaster->query($sql)){
return false;
}
}
public function squery($sql){
if($result=$this->mysqlslave->query($sql)){
return $result;
}else{
return false;
};
}
public function fetArray($sql){
if($result=$this->squery($sql)){
while($row=$result->fetch_array(MYSQLI_ASSOC)){
$resultraa[] = $row;
};
return $resultraa;
}
}
}
?>
PHP代码:
<?php
require 'init.php';
$mem = new Memcached;
/* $mem->set('en_xx','bucuo');
echo($mem->get('en_xx'));
$mem->set('cn_jjyy','wokao');
echo($mem->get('cn_jjyy'));
*/
$sq = new Mysql;
$sql = "insert into mybb(pid) values(200)";
$mdsql = md5($sql);
if(!$result=$mem->get('cn_'.$mdsql)){
$sq->mquery("insert into mybb(pid) values(200)"); //插入到主mysql
$result = $sq->fetArray("select * from mybb"); //查询 是 从mysql
foreach($result as $var){
echo $var['pid'];
}
$mem->set('cn_'.$mdsql,$result); //添加到 名为 cn 的 memcached 服务器
}else{
foreach($result as $var){
echo $var['pid'];
}
}
?>

[ 本帖最后由 逆雪寒 于 2008-1-10 16:25 编辑 ]
作者: 逆雪寒 发布时间: 2008-01-10
作者: xmlwww 发布时间: 2008-01-10
--------------
还有个建议,把头像换回去吧,这样才有人来原创区混啊,呵呵

作者: BlackCoffee 发布时间: 2008-01-10
作者: 网鬼 发布时间: 2008-01-10
作者: xlight 发布时间: 2008-01-10
准备弄 mysql 族
哎 2008年似乎对我来说是不幸运的一年. 刚2007年一过. 就丢了工作.
真是........郁闷罗
作者: 逆雪寒 发布时间: 2008-01-10
偶在时代互联的最后一天写了一天的工作交接报告,边写边回忆着一年半以来的辛酸~~
作者: jongin 发布时间: 2008-01-10
怎么丢的工作啊,不会是因为投身开源事业影响的吧?
作者: mzt 发布时间: 2008-01-10

给PHP做的罗
作者: 逆雪寒 发布时间: 2008-01-10
作者: niohe 发布时间: 2008-01-10

作者: 逆雪寒 发布时间: 2008-01-11
作者: lichao 发布时间: 2008-01-11

哈哈 谢谢楼上
作者: 逆雪寒 发布时间: 2008-01-12
引用:
原帖由 逆雪寒 于 2008-1-10 19:58 发表公司没钱了裁员就裁到我了.

给PHP做的罗

作者: mzt 发布时间: 2008-01-12
你们公司不识人才
作者: 华蓝 发布时间: 2008-01-13

找工作现在都没人要。哎~~ 真的
作者: 逆雪寒 发布时间: 2008-01-13

作者: dhgdmw 发布时间: 2008-01-13
作者: hopingphp 发布时间: 2008-01-15
里面菜鸟太多了
作者: void 发布时间: 2008-01-16
我回广州了
作者: 逆雪寒 发布时间: 2008-02-13
作者: yiqing666 发布时间: 2008-02-13

作者: 逆雪寒 发布时间: 2008-02-13
作者: smallwl 发布时间: 2008-02-13
无数扇门又对你敞开了!
作者: ainylp 发布时间: 2008-07-19
作者: ginux 发布时间: 2008-07-20
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28