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原理之变量(Variables inside PHP)
Aug 09 PHP
获取URL文件名后缀
Oct 24 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
Mar 07 PHP
php实现字符串反转输出的方法
Mar 14 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
Jun 10 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
PHP读书笔记_运算符详解
Jul 01 PHP
php并发加锁示例
Oct 17 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
Zend Framework数据库操作技巧总结
Feb 18 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
Terran建筑一览
2020/03/14 星际争霸
深入解析php中的foreach函数
2013/08/31 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
定义select的边框颜色
2008/04/28 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
python3.6实现学生信息管理系统
2019/02/21 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
Python实现异步IO的示例
2020/11/05 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
Linux内核产生并发的原因
2012/07/13 面试题
物流专业大学应届生求职信
2013/11/03 职场文书
音乐教学反思
2014/02/02 职场文书
激励员工的口号
2014/06/16 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
python 多态 协议 鸭子类型详解
2021/11/27 Python
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL