Memcached+PHP+Mysql+Linux 实践

首先确保你的服务器环境已经具备了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");

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

时间: 2024-08-24 10:28:10

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

linux下安装mysql【实践版】

[环境及文件版本] red hat   linux   v6.2 mysql linux 版  x86-x64  v5.6 [准备需要的文件] 首先去官网下载mysql的linux版本,可以针对安装的操作系统选择合适的版本. 然后将文件解压到一个目录,例如 /usr/local/中,并重命名为mysql.确保最终所有的文件在/usr/local/mysql/这个目录中,使用命令行时,也需要定位到此目录,后续的操作都是在这个目录中完成的. [初始化数据库文件] 然后拷贝support-files/

linux实践之程序破解

linux实践之程序破解 这次的实践是文件破解,让我们从login可执行文件开始吧! 首先我们执行一下这个可执行程序 ①我们希望在不知道密码的情况下,能够登陆进去.且无论密码是什么,都是提示“on your command,my master!”. 首先对该程序执行反汇编. 我们首先要找到main函数的入口处. 我们可以看到cmp语句后,有jmp语句,如果不等于就跳转到“0x8048466”处,这是正常程序执行的过程,我们在这里希望不等于的时候,也不要跳转,所以可以把“75 0e”修改为“75

linux实践之ELF文件分析

linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf.o文件. 查看scn15elf.o中各个段和符号表的信息. 各个段的详细信息如下. 符号表的信息如下: 使用readelf命令查看各个段的详细信息: 段表信息如下: 符号表信息如下: 下面让我们开始分析文件头吧! 由于我的虚拟机是32位的,我下面就主要以32位的系统进行分析,就不比较32位机和64

mysql主从复制实践之单数据库多实例

1.主从复制数据库实战环境准备 MySQL主从复制实践对环境的要求比较简单,可以是单机单数据库多实例的环境,也可以是两台服务器之间,每台服务器都部署一个独立的数据库的环境.本文以单机数据库多实例的环境进行实践. 2.主从复制服务器角色定义 序号 数据库角色 数据库IP信息 数据库port信息 数据库配置路径 1 master 192.168.1.20 3306 /data/3306 2 slave1 192.168.1.20 3307 /data/3307 3 slave2 192.168.1.

memcached 安装,Linux环境

安装环境 memcached版本:1.4.31 系统环境:CentOS 6.8 64位 因为Linux系统的memcached依赖于libevent-dev,所以要先安装libevent-dev. libevent-dev 连网安装: Debian/Ubuntu: apt-get install libevent-dev Redhat/Centos: yum install libevent-devel 文件安装: 1.下载安装文件.推荐:https://pkgs.org/ 2.需要的安装文件包

【实践报告】Linux实践三

Linux实践——程序破解 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令.(机器码:90) JNE:条件转移指令,如果不相等则跳转.(机器码:75) JE:条件转移指令,如果相等则跳转.(机器码:74) JMP:无条件转移指令.段内直接短转Jmp short(机器码:EB)段内直接近转移Jmp near(机器码:E9)段内间接转移Jmp word(机器码:

让memcached和mysql更好的工作

来源:http://chaoqun.17348.com/2008/08/memcached_work_with_mysql 这次是Fotolog的经验,传说中比Flickr更大的网站,Fotolog在21台服务器上部署了51个memcached实例,总计有254G缓存空间可用,缓存了多达175G的内容,这个数量比很多网站的数据库都要大的多,原文是A Bunch of Great Strategies for Using Memcached and MySQL Better Together,我这

mysql linux版安装

首先请大家允许吐点口水,本来为了省点事,参照了菜鸟教程mysql的安装步骤 那叫一个坑爹啊,好不容易安找教程上的所有步骤安装完后,发现竟然缺少一些 重要文件如(pid),在网上找了好久,发现很多人都遇到了类似的问题,折腾了好 久也没安装成功,偶然在网上看到有人用rpm安装一下就成功了,于是抱着半信半疑 的态度,在官网上下载了mysql rpm包,没想到真的成功了,这里推荐给大家安装. 本人在安装mysql linux时使用的就是rpm源码安装,这种方式简单高效,这是给大家提供 一个下载链接: h

linux实践——php5编译mysql扩展

系统ubutnu12.04 - php 5.2 通用步骤: 下载 对应php版本的扩展源码 解压并进入目录 执行phpize预编译(一般和php执行文件在一个目录) ./configure --with-php-config=php路径/php-config(如果出现错误安装autoconf) make && makeinstall 配置php.ini文件开启对应的扩展 重启php服务(php-fpm或apache) ------------------------------ 举栗: 现