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 syntax error, unexpected $end 错误的一种原因及解决
Oct 25 PHP
php生成随机密码的几种方法
Jan 17 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
教大家制作简单的php日历
Nov 17 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
thinkphp3.x中变量的获取和过滤方法详解
May 20 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
vue组件间通信解析
2017/03/01 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
python实现数通设备端口监控示例
2014/04/02 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
翻译学院毕业生自荐书
2014/02/02 职场文书
我爱我家教学反思
2014/05/01 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书