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 相关文章推荐
PHP页面间传递参数实例代码
Jun 05 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
PHP学习笔记之数组篇
Jun 28 PHP
php入门学习知识点三 PHP上传
Jul 14 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 PHP
php判断对象是派生自哪个类的方法
Jun 20 PHP
Yii实现的多级联动下拉菜单
Jul 13 PHP
CI框架表单验证实例详解
Nov 21 PHP
PHP实现验证码校验功能
Nov 16 PHP
php微信公众号开发之现金红包
Apr 16 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
PHP哈希表实现算法原理解析
Dec 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
DOMXML函数笔记
2006/10/09 PHP
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
写的htc的数据表格
2007/01/20 Javascript
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
python判断windows隐藏文件的方法
2014/03/21 Python
Python命令启动Web服务器实例详解
2017/02/23 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
django的model操作汇整详解
2019/07/26 Python
Python 硬币兑换问题
2019/07/29 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
中英双版中文教师求职信
2013/10/27 职场文书
企业总经理职责
2014/02/02 职场文书
运动会方阵解说词
2014/02/12 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
司机岗位职责说明书
2014/07/29 职场文书
研究生导师推荐信
2014/09/06 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
培训督导岗位职责
2015/04/10 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB