首先确保你的服务器环境已经具备了memcached和lamp,关于在Linux上搭建memcahced+php环境可以参考我的另外一篇帖子
( http://www.cnblogs.com/codeAB/p/5591118.html )
在往下看之前你应该带着这几个问题。
{ memcached 能解决什么问题 }{ 现在比较热议的一个话题 radis替代memcached  }
{ 什么情况下适合使用memcached }{ memcached基本用法 }{ 利用memcached构建分布式缓存系统 }

(1)举个例子,论坛里面的前面几条都是精华帖,访问量最大。一个帖子包括[帖子正文.评论.点赞.访问次数...],我们来模拟一下数据,一个帖子一天访问100万次,评论10万次,点赞50万次。如果所有操作都直接与mysql相连,那么至少要执行多少次数据库查询?
(帖子100万次-读 ,评论10万次-写,点赞50万次-写),一篇帖子一天至少就要执行160万次数据库操作,现在我们使用memcached来缓解mysql压力,
当第一个用户访问这个贴子后就将数据缓存到memcached中,缓存包括贴子正文,评论(通常只需要缓存最近的几十条评论),点赞次数,这样第二个人点击
这篇帖子的时候,直接从memcached中获取数据返回,有新评论后将评论数据更新到memcached中,点赞也是直接更新memcached,甚至帖子内容被发布者修改后
也可以直接修改memcached中的内容,都不用去动数据库,所有的更新和读取都在memcached中完成,也就是说从之前的一片帖子一天160万次数据库操作变成了一次!!只要你的服务器不断电,那么数据可以持续一个月,一个月一篇帖子从4800万次数据库操作 ---> 变成1次 。 当然这里得出的结论1次是不对的,由于memcached的最大缓存时间是30天,如果中途服务器断电,那么数据会全部丢失,所以在刚刚这个例子中,对于评论的增加和帖子内容的修改,这些变动最终还是要拿到数据库里面存好,所以我建议可以使用定时器( Linux contrab ) 每隔几分钟就把最新的memcahced数据同步到数据库,就算服务器断电了,也只丢失几分钟的数据,也是可以接受的,当然服务器无缘无故断电这种概率是非常微乎其微的。
我想通过上面的例子对比你应该看出了memcached能解决什么问题了。主要用来缓解数据库压力。

(2) 现在很多人议论或者已经在实践中用radis(泛指nosql)用来替换memcached了,这里我就不长篇大论去说二者的差异了,你可以搜索相关文章资料,
捡几个重点说,memcached的目标就是做缓存,为了缓解数据库压力诞生的,而radis的目标是做一个数据库的替换方案,这货是建立在内存上的数据库,memcached断电后数据全部丢失(可以用定时器做持久化),radis是持久化的数据库,最重要的一点来了:memcached单一轻量,部署简单,多线程分布式的,radis比较吃配置,且是单线程的,看得出在做大型分布式缓存系统的时候memcached更方便安全,
google和facebook这些大佬都在用memcached,而国内用radis的也比较多。最后我们在看一下第一点目标的差异,一个是缓解数据库压力的,一个是用来替代传统关系数据库的nosql,
也就是说memcached和radis并不是竞争关系,甚至两者是可以协同工作的,radis做为数据库,memcached作为中间缓存系统,缓解radis负载量,最后我希望
你也去学习一下nosql的相关知识,一种高性能内存数据库,我相信这是未来数据库发展的一个方向!

(3)memcached本身用法都很简单,我相信你花10分钟看一遍官方文档就知道每个方法有什么作用了,但是看完过后是不是一脸茫然?
在那些情况适合使用memcached?  首先不同的网站不同的场景下没有一个固定的规律,memcached的目标是什么? 缓解数据库压力。
那么根据你自己的网站分析,找到访问量大数据变更少,我们去看看网易云音乐网站,看看那些地方memcached可以派上用场。

打开首页看到中间部分是热门推荐如图1,这个地方的推荐大概几分钟至几十分钟都是不变的,访问量非常大,随便点击
一个推荐进去看到如图2,

包含了这个专辑创建的一些信息介绍,还有就是里面包含的歌曲列表信息,用户评论等,
可以看到列表右上角当前播放次数是16万次,也就是16万次读数据库(还不包括评论和专辑的一些统计信息更新),利用memcached,在第一个用户请求了这个页面后就缓存进memcached中,
以后的用户请求就直接走memcached了,利用memcached的让16万次读数据库降到1次!! ,
评论和专辑的统计信息这里也可以走memcached,然后定时同步到数据库,大大降低数据库负载量。

(4)用法很简单,随便举个例子,更多函数方法请查看php官方手册

    $m = new Memcached();
$m->addServer('localhost', 11211);
$m->flush();
$m->add("key1","value1");
class People {
function __construct($name) {
$this->name = $name;
}
function getname() {
return $this->name;
}
}
$p = new People("Tom");
$s = serialize($p);
$m->add("dd",$s);
echo unserialize($m->get("dd"))->getname();
echo "<br>".$m->get("key1");

(5)

$m = new Memcached();
$servers = array(
// 第三个参数是权重,数据会随机插入到一个memcached服务器中,权重越大被使用的概率越大
array('192.168.150.130', 11211, 20),
array('192.168.150.131', 11211, 30)
array('192.168.150.133', 11211, 50)
);
// 三个主机之间通常在一个机房内,三个机子使用局域网连通,当然这不是必须的,原则上只要三台机子能互通就行
$m->addServers($servers);
$m->flush();
$m->add("key1","value1");

// 其他操作和上面的例子一样了

Memcached+PHP+Mysql+Linux 实践的更多相关文章

  1. memcached vs MySQL Memory engine table 速度比较_XMPP Jabber即时通讯开发实践_百度空间

    memcached vs MySQL Memory engine table 速度比较_XMPP Jabber即时通讯开发实践_百度空间 memcached vs MySQL Memory engin ...

  2. paip.python连接mysql最佳实践o4

    paip.python连接mysql最佳实践o4 python连接mysql 还使用了不少时间...,相比php困难多了..麻烦的.. 而php,就容易的多兰.. python标准库没mysql库,只 ...

  3. linux实践之程序破解

    linux实践之程序破解 这次的实践是文件破解,让我们从login可执行文件开始吧! 首先我们执行一下这个可执行程序 ①我们希望在不知道密码的情况下,能够登陆进去.且无论密码是什么,都是提示“on y ...

  4. linux实践之ELF文件分析

    linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf ...

  5. 让memcached和mysql更好的工作

    这次是Fotolog的经验,传说中比Flickr更大的网站,Fotolog在21台服务器上部署了51个memcached实例,总计有254G缓存空间可用,缓存了多达175G的内容,这个数量比很多网站的 ...

  6. 其他综合-使用Xshell远程连接管理Linux实践

    使用Xshell远程连接管理Linux实践 1. Xshell整体优化 1)点击 工具 ,然后选择 选项 2)在 常规 选项中,下面的存放路径根据个人爱好修改(可选默认) 3)在 更新 选项中,将 √ ...

  7. 其它综合-使用Putty远程连接管理Linux实践

    使用Putty远程连接管理Linux实践 1.获取putty 获取 putty有很多方法,以下是我为大家提供的下载地址: 个人网盘地址,提取码:tz83 官方下载地址 解释: 官方下载的是 zip 压 ...

  8. 【实践报告】Linux实践三

    Linux实践——程序破解 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP ...

  9. Linux实践:文件破解

    Linux实践:文件破解 标签(空格分隔): 20135321余佳源 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即"空指令".执行到NOP指令 ...

随机推荐

  1. Xcode7.1环境下上架iOS App到AppStore 流程② (Part 二)

    前言部分 part二部分主要讲解 iOS App IDs 的创建.概要文件的配置.以及概要文件安装的过程. 一.iOS App IDs 的创建 1)进入如图1所示界面点击右上角箭头所指的加号 进入iO ...

  2. 基于redis的处理session的方法

    一个基于redis的处理session的方法,如下. <?php class Session_custom { private $redis; // redis实例 private $prefi ...

  3. Golang接口(interface)三个特性(译文)

    The Laws of Reflection 原文地址 第一次翻译文章,请各路人士多多指教! 类型和接口 因为映射建设在类型的基础之上,首先我们对类型进行全新的介绍. go是一个静态性语言,每个变量都 ...

  4. 调用sharepoint 2010 REST报版本过低

    问题描述: 写了一个webservice调用sharepoint REST,本机测试成功,部署到服务器上后报错 (System.Data.Services.Client.DataServiceQuer ...

  5. 我的第一篇博客----LCS学习笔记

    LCS引论 在这篇博文中,博主要给大家讲一个算法----最长公共子序列(LCS)算法.我最初接触这个算法是在高中学信息学竞赛的时候.那时候花了好长时间理解这个算法.老师经常说,这种算法是母算法,即从这 ...

  6. 2、项目标准的制定 - PMO项目管理办公室

    PMO项目管理办公室应该是针对公司级别的项目内容制定项目标准.这个由公司的项目经理们进行集中讨论,然后将项目标准进行文档化,标准化,从而为公司的项目进行指导性的功能,为公司的项目进行服务.下面对项目标 ...

  7. 【mysql】关于binlog格式

    写在前面的话 1.推荐用mixed,默认使用statement,基于上下文  set session/global binlog_format=mixed; 2.二进制日记录了数据库执行更改的操作,如 ...

  8. Spark核心——RDD

    Spark中最核心的概念为RDD(Resilient Distributed DataSets)中文为:弹性分布式数据集,RDD为对分布式内存对象的 抽象它表示一个被分区不可变且能并行操作的数据集:R ...

  9. 封装系统(以封装Windows 7为例)

    安装步骤: 1.安装系统 2.启用Administrator帐户 3.进行简单的系统设置 4.系统精简 5.安装Adobe Flash Player 6.设置IE主页 7.在系统盘(C盘)创建Sysp ...

  10. 鸟哥私房菜学习(一)——Linux背景了解

    1.Linux,继承鱼Unix 2.Unix档案系统的两个重要概念 3.几个主要的 Linux distributions 发行者网址: • Red Hat: http://www.redhat.co ...