首先确保你的服务器环境已经具备了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. java.net.SocketException: Connection reset

    java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java ...

  2. Mybatis框架的模糊查询(多种写法)、删除、添加(四)

    学习Mybatis这么多天,那么我给大家分享一下我的学习成果.从最基础的开始配置. 一.创建一个web项目,看一下项目架构 二.说道项目就会想到需要什么jar 三.就是准备大配置链接Orcl数据库 & ...

  3. ++a和a++的区别

    另: short s = 4; s = s + 1; // 编译不通过.因为编译器无法判断等号右边的运算结果是否依然在等号左边的short类型范围内,容易丢失精度. s += 1; // 编译通过.+ ...

  4. JS高程4.变量,作用域和内存问题(1)

    1.基本类型和应用类型的值 ECMAScript变量可能包含两种不同数据类型的值: 基本类型值--简单的数据段.(5种基本的数据类型,按值访问,因为可以操作保存在变量中的实际的值.) 引用类型值--多 ...

  5. CartO

    Carto documentation The following is a list of properties provided in CartoCSS that you can apply to ...

  6. xhtml、html与html5的区别

    一.基本概念: html:超文本标记语言 (Hyper Text Markup Language) xhtml:可扩展超文本标记语言,是一种置标语言,表现方式与超文本标记语言(HTML)类似,不过语法 ...

  7. Python:版本升级

    Linux 上安装的python版本是2.6.6,不能满足我运行软件的要求,所以对python进行升级.现在要了解MySQL Fabric,需要使用Python 2.7,所以只能对现有版本进行升级了. ...

  8. Sql Server 2016新功能之 Row-Level Security

    Sql Server 2016 有一个新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原来我是个英语渣_(:з」∠)_) 直接上例子.这个功能相当通过对表添加一个函数作为 ...

  9. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  10. python安装numpy、scipy和matplotlib等whl包的方法

    最近装了python和PyCharm开发环境,但是在安装numpy和matplotlib等包时出现了问题,现总结一下在windows平台下的安装方法. 由于现在找不到了工具包新版本的exe文件,所以采 ...