面临的问题

对于高并发高訪问的 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. RobotFramwork自定义库

    这么长时间才知道有RobotFramwork这东西... 感叹之前都干啥去了,感叹公司为啥不用这货? 网上的安装文档都有,就不用自己在记录啦. 感觉在实际实用时,肯定要有自己定义的库啊,不能只用bui ...

  2. python 序列化之pickle模块 json模块

    一 pickle import pickle s='dd' print(pickle.dumps(s)) 输出: b'\x80\x03X\x02\x00\x00\x00ddq\x00.' pickle ...

  3. Linux内核解析:进程间通信:管道

    管道的定义管道的用途管道的操作管道非法read与write内核实现解析管道通信原理及其亲戚通信解析父子进程通信解析亲缘关系的进程管道通信解析管道的注意事项及其性质管道有以下三条性质shell管道的实现 ...

  4. 反汇编角度->C++ const

    #include<iostream> #include<stdlib.h> using namespace std; const int &add( const int ...

  5. 什麼是 struct,union,enumeration 的 tag ?

    struct tag { member-list }; union tag { member-list }; enum tag { member-list }; union test1 { int a ...

  6. 浅谈DPCHookSSDT和RemoveDPC

    最近学了DPC这一对,把Win7 32位和64位都做了,查阅了大量的资料,并且进行了大量调试,理一下思路,为了后面更好的学习. 转载请注明出处:http://www.cnblogs.com/littl ...

  7. QBXT T15214 Day2上午遭遇

    题目描述 你是能看到第一题的 friends呢. -- hja ?座楼房,立于城中 . 第?座楼,高度 ℎ?. 你需要一开始选择座楼,跳. 在第 ?座楼准备跳需要 ??的花费. 每次可以跳到任何一个还 ...

  8. mybatis-plus generator template 中的全部属性

    { "date": "2018-10-30", "superServiceImplClassPackage": "com.baom ...

  9. Linux下挂载指定分区下的某个文件夹到指定目录(mount)

    # 挂载 mount --bind olddir newdir # 卸载 umount newdir 参考: http://www.cnblogs.com/dabaopku/archive/2010/ ...

  10. oracle function dtrace

    https://andreynikolaev.wordpress.com/2010/10/28/appetizer-for-dtrace/ Appetizer for DTrace Filed und ...