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 array_intersect()函数使用代码
Jan 14 PHP
PHP数据库调用类调用实例(详细注释)
Jul 12 PHP
基于php权限分配的实现代码
Apr 28 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
php查找字符串出现次数的方法
Dec 01 PHP
php实现MySQL数据库备份与还原类实例
Dec 09 PHP
PHP实现linux命令tail -f
Feb 22 PHP
php设计模式之单例模式代码
Jun 11 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
PHP实现的链式队列结构示例
Sep 15 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
php 读取文件乱码问题
2010/02/20 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
js数组常用最重要的方法
2018/02/04 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
python字符串连接的N种方式总结
2014/09/17 Python
在Python中编写数据库模块的教程
2015/04/29 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
Django框架实现的分页demo示例
2019/05/25 Python
如何理解Python中包的引入
2020/05/29 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
ECHT官方网站:男女健身服
2020/02/14 全球购物
开工仪式策划方案
2014/05/23 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers