memcached 和 mysql 主从环境下php开发代码详解


Posted in PHP onMay 16, 2010
<?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 
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 的操作. 详细的时间不多.我要离开公司了
在memcached 的多服务器上. 我的实现思路是这样的: 在把信息添加到 内存服务器的时候.我选择了手工设置添加到那个服务器.而不用传统的根据ID自动分配.
这样可以更灵活点.
以内存服务器名 为表示 比如 存 $arr 这个信息到 en 这台 内存服务器 我就这样写 $mem->set('en_'.$arr); 明白了吧
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; 
} 
} 
} 
?>

这个是 mysqli 的封装. 也就是 读 从 写 主 的操作的封装.
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']; 
} 
} 
?>
PHP 相关文章推荐
构建简单的Webmail系统
Oct 09 PHP
php的正则处理函数总结分析
Jun 20 PHP
php 全文搜索和替换的实现代码
Jul 29 PHP
PHP学习笔记之二
Jan 17 PHP
php输出xml必须header的解决方法
Oct 17 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
屏蔽PHP默认设置中的Notice警告的方法
May 20 PHP
详解WordPress中添加友情链接的方法
May 21 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
php json_encode与json_decode详解及实例
Dec 13 PHP
php array_reverse 以相反的顺序返回数组实例代码
Apr 11 PHP
php 中文和编码判断代码
May 16 #PHP
PHP URL地址获取函数代码(端口等) 推荐
May 15 #PHP
php select,radio和checkbox默认选择的实现方法
May 15 #PHP
php checkbox复选框值的获取与checkbox默认值输出方法
May 15 #PHP
php radio 单选框获取与保持值的实现代码
May 15 #PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
May 15 #PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 #PHP
You might like
玩转图像函数库―常见图形操作
2006/09/03 PHP
PHP制作图型计数器的例子
2006/10/09 PHP
PHP中ADODB类详解
2008/03/25 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
python的迭代器与生成器实例详解
2014/07/16 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
购买原创艺术品:Zatista
2019/11/09 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
一道SQL存储过程面试题
2016/10/07 面试题
销售会计工作职责
2013/12/02 职场文书
介绍信范文大全
2015/05/07 职场文书
贫困证明书范文
2015/06/16 职场文书
病假条格式范文
2015/08/17 职场文书
同学会演讲稿
2019/04/02 职场文书
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript