面临的问题

对于高并发高訪问的 Web应用程序来说。数据库存取瓶颈一直是个令人头疼的问题。

特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰值已经达到500的时候,那你的程序执行离崩溃的边缘也不远了。非常多小站点的开发者一開始都将注意力放在了产品需求设计上。却忽视了程序总体性能,可扩展性等方面的考虑。结果眼看着訪问量一天天往上爬,可突然发现有一天站点由于訪问量过大而崩溃了,到时候哭都来不及。所以我们一定要未雨绸缪,在数据库还没罢工前,想方设法给它减负。这也是这篇文章的主要议题。

大家都知道,当有一个request过来后,webserver交给appserver。app处理并从db中存取相关数据,但db存取的花费是相当高昂的。特别是每次都取同样的数据,等于是让数据库每次都在做高耗费的无用功,数据库假设会说话。肯定会发牢骚,你都问了这么多遍了,难道还记不住吗?是啊。假设 app拿到第一次数据并存到内存里,下次读取时直接从内存里读取。而不用麻烦数据库。这样不就给数据库减负了?并且从内存取数据必定要比从数据库媒介取快非常多倍。反而提升了应用程序的性能。

因此,我们能够在web/app层与db层之间加一层cache层

主要目的:

1. 降低数据库读取负担;

2. 提高数据读取速度。

并且,cache存取的媒介是内存。而一台server的内存容量一般都是有限制的,不像硬盘容量能够做到TB级别。所以,能够考虑採用分布式的cache层,这样更易于破除内存容量的限制,同一时候又添加了灵活性。

Memcached 介绍

Memcached 是开源的分布式cache系统,如今非常多的大型web应用程序包含 facebook,youtube,wikipedia。yahoo等等都在使用memcached来支持他们每天数亿级的页面訪问。

通过把cache层与他们的web架构集成。他们的应用程序在提高了性能的同一时候。还大大降低了数据库的负载。 详细的memcached资料大家能够直接从它的官方站点[1]上得到。

这里我就简单给大家介绍一下memcached的工作原理:

Memcached处理的原子是每个(key,value)对(下面简称kv对),key会通过一个hash算法转化成hash-key,便于查找、对照以及做到尽可能的散列。同一时候,memcached用的是一个二级散列。通过一张大hash表来维护。
    Memcached 有两个核心组件组成:服务端(ms)和client(mc),在一个memcached的查询中,mc先通过计算key的hash值来确定kv对所处在的ms位置。当ms确定后,client就会发送一个查询请求给相应的ms,让它来查找确切的数据。由于这之间没有交互以及多播协议,所以 memcached交互带给网络的影响是最小化的。

举例说明:考虑下面这个场景,有三个mc各自是X。Y,Z,还有三个ms各自是A,B,C:

设置kv对 X想设置key=”foo”,value=”seattle” X拿到ms列表,并对key做hash转化。依据hash值确定kv对所存的ms位置 B被选中了 X连接上B,B收到请求,把(key=”foo”,value=”seattle”)存了起来
获取kv对 Z想得到key=”foo”的value Z用同样的hash算法算出hash值,并确定key=”foo”的值存在B上 Z连接上B。并从B那边得到value=”seattle” 其它不论什么从X,Y,Z的想得到key=”foo”的值的请求都会发向B。

Memcache介绍的更多相关文章

  1. memcache课程---1、memcache介绍及安装(memcache作用)

    memcache课程---1.memcache介绍及安装(memcache作用) 一.总结 一句话总结: 减少对数据库的访问,因为数据库的访问比较花费时间 1.memcache为什么比操作数据库快的多 ...

  2. Memcahce(MC)系列(一)Memcache介绍、使用、存储、算法、优化

    写在前面:前不久在工作中被问到关于MC一致哈希的问题,由于时隔太久差点儿忘记,特前来恶补一下MC,下面是前几年在工作中学习MC时的一些资料,来历不明,特整理一下,希望对大家的学习也能有帮助. 32 的 ...

  3. Memcache介绍与应用场景

    一:概念介绍         Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果 ...

  4. 全面解析windows下Memcache技术应用

    原文  http://www.cnblogs.com/liuqin520/p/4615644.html   一.Memcache介绍 Memcache 是 danga.com 的一个项目,最早是为 L ...

  5. 基于Memcache的分布式缓存系统详解

    文章不是简单的的Ctrl C与V,而是一个字一个标点符号慢慢写出来的.我认为这才是是对读者的负责,本教程由技术爱好者成笑笑(博客:http://www.chengxiaoxiao.com/)写作完成. ...

  6. memcache 总结笔记

    (一):基础概念 memcache是什么? Memcache 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态 ...

  7. 缓存数据库Memcache

    为什么用缓存数据库 MySQL:将数据存储在磁盘上,数据写入读取相对较慢 Memcached:将数据存在内存中的数据库,数据读写都快,但是数据容易丢失 数据存储,数据仓库选择MySQL这种磁盘的数据库 ...

  8. PHP之Memcache和Memcached

    本篇文章向大家介绍的是PHP中的Memcache和Memcached ,有兴趣的朋友可以看一下 **Memcache介绍:**Memcache是一套分布式缓存系统,分布式就是说可以在多台服务器上同时安 ...

  9. lnmp架构搭建实例

    lamp->lnmp nginx survey.netcraft.net 查看各大网站使用的web服务器,使用下面的命令 # curl -I www.sina.com 结论:现在大型网站几乎统一 ...

随机推荐

  1. hdu5852 Intersection is not allowed! 【矩阵行列式】

    题意 给出\(n*n\)网格\((n<=10^5)\) 顶部有\(K\)个起点,底部有\(K\)个相对应的终点 每次只能向下或向右走 求有多少种从各个起点出发到达对应终点且路径不相交的路径? 对 ...

  2. co模块总结

    1.thunk函数 javascript中的thunk函数就是一个单参数函数,且该参数必须是一个callback函数,callback的签名必须为callback(err,args...); 所谓的t ...

  3. [bzoj1095][ZJOI2007]Hide 捉迷藏 点分树,动态点分治

    [bzoj1095][ZJOI2007]Hide 捉迷藏 2015年4月20日7,8876 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiaji ...

  4. python time模块 sys模块 collections模块 random模块 os模块 序列化 datetime模块

    一 collections模块 collections模块在内置的数据类型,比如:int.str.list.dict等基础之上额外提供了几种数据类型. 参考博客 http://www.pythoner ...

  5. Linux System Programming 学习笔记(六) 进程调度

    1. 进程调度 the process scheduler is the component of a kernel that selects which process to run next. 进 ...

  6. .NET Core 微服务之Polly重试策略

    接着上一篇说,正好也是最近项目里用到了,正好拿过来整理一下,园子里也有一些文章介绍比我详细. 简单介绍一下绍轻量的故障处理库 Polly  Polly是一个.NET弹性和瞬态故障处理库 允许我们以非常 ...

  7. RTSP、 RTMP、HTTP的共同点、区别(转)

    共同点: 1:RTSP.RTMP.HTTP都是在应用层. 2:理论上RTSP.RTMP.HTTP都可以做直播和点播,但一般做直播用RTSP.RTMP,做点播用HTTP.做视频会议的时候原来用SIP协议 ...

  8. QQ客服代码,支持临时会话

    <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=QQ号&site=qq&m ...

  9. 无法安装64位版本的visio/office,因为在您的PC上找到了以下32位程序的解决办法

    解决方案:按下win+R键,打开运行,输入regedit,打开注册表,依次定位到 HKEY_CLASSES_ROOT\Installer\Products,展开Products后  将这些“00005 ...

  10. python 操作系统和进程

    一. 操作系统介绍 多道程序系统 多道程序设计技术       所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行.即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种 ...