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 Memcache 中实现消息队列
Nov 24 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
Jun 21 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
Nov 12 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
PHP中使用smarty生成静态文件的例子
Apr 24 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
详解PHP中的Traits
Jul 29 PHP
php 问卷调查结果统计
Oct 08 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
PHP7 echo和print语句实例用法
Feb 15 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 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
php json_encode值中大括号与花括号区别
2013/09/30 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
php通过strpos查找字符串出现位置的方法
2015/03/17 PHP
php实现Session存储到Redis
2015/11/11 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
2019/05/01 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
django基础学习之send_mail功能
2019/08/07 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
材料化学应届生求职信
2013/10/09 职场文书
关于打架的检讨书
2014/01/17 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
道歉短信大全
2015/05/12 职场文书
新学期感想
2015/08/10 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js