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 相关文章推荐
动易数据转成dedecms的php程序
Apr 07 PHP
改变Apache端口等配置修改方法
Jun 05 PHP
PHP开发中四种查询返回结果分析
Jan 02 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
php设计模式之命令模式的应用详解
May 21 PHP
PHP自动重命名文件实现方法
Nov 04 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
php实现36进制与10进制转换功能示例
Jan 10 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
PHP接入微信H5支付的方法示例
Oct 28 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的I方法使用详解
2014/06/18 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
浅谈Javascript实现继承的方法
2015/07/06 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
Python的函数嵌套的使用方法
2014/01/24 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
python获取mp3文件信息的方法
2015/06/15 Python
python配置grpc环境
2019/01/01 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
keras之权重初始化方式
2020/05/21 Python
Python类及获取对象属性方法解析
2020/06/15 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
责任心演讲稿
2014/05/14 职场文书
公司借条范本
2015/05/25 职场文书
白银帝国观后感
2015/06/17 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书