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中养成7个面向对象的好习惯
Jan 28 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
PHP curl 获取响应的状态码的方法
Jan 13 PHP
php将session放入memcached的设置方法
Feb 14 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 PHP
PHP接入支付宝接口失效流程详解
Nov 10 PHP
php中配置文件保存修改操作 如config.php文件的读取修改等操作
May 12 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
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
javascript 写类方式之一
2009/07/05 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
python 下划线的不同用法
2020/10/24 Python
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
中层竞聘演讲稿
2014/01/09 职场文书
工作推荐信范文
2014/05/10 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
2014年文员工作总结
2014/11/18 职场文书
律师催款函范文
2015/06/24 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
2019消防宣传标语!
2019/07/10 职场文书