Memcache介绍
面临的问题
对于高并发高訪问的 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介绍的更多相关文章
- memcache课程---1、memcache介绍及安装(memcache作用)
memcache课程---1.memcache介绍及安装(memcache作用) 一.总结 一句话总结: 减少对数据库的访问,因为数据库的访问比较花费时间 1.memcache为什么比操作数据库快的多 ...
- Memcahce(MC)系列(一)Memcache介绍、使用、存储、算法、优化
写在前面:前不久在工作中被问到关于MC一致哈希的问题,由于时隔太久差点儿忘记,特前来恶补一下MC,下面是前几年在工作中学习MC时的一些资料,来历不明,特整理一下,希望对大家的学习也能有帮助. 32 的 ...
- Memcache介绍与应用场景
一:概念介绍 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果 ...
- 全面解析windows下Memcache技术应用
原文 http://www.cnblogs.com/liuqin520/p/4615644.html 一.Memcache介绍 Memcache 是 danga.com 的一个项目,最早是为 L ...
- 基于Memcache的分布式缓存系统详解
文章不是简单的的Ctrl C与V,而是一个字一个标点符号慢慢写出来的.我认为这才是是对读者的负责,本教程由技术爱好者成笑笑(博客:http://www.chengxiaoxiao.com/)写作完成. ...
- memcache 总结笔记
(一):基础概念 memcache是什么? Memcache 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态 ...
- 缓存数据库Memcache
为什么用缓存数据库 MySQL:将数据存储在磁盘上,数据写入读取相对较慢 Memcached:将数据存在内存中的数据库,数据读写都快,但是数据容易丢失 数据存储,数据仓库选择MySQL这种磁盘的数据库 ...
- PHP之Memcache和Memcached
本篇文章向大家介绍的是PHP中的Memcache和Memcached ,有兴趣的朋友可以看一下 **Memcache介绍:**Memcache是一套分布式缓存系统,分布式就是说可以在多台服务器上同时安 ...
- lnmp架构搭建实例
lamp->lnmp nginx survey.netcraft.net 查看各大网站使用的web服务器,使用下面的命令 # curl -I www.sina.com 结论:现在大型网站几乎统一 ...
随机推荐
- BZOJ4817 [Sdoi2017]树点涂色 【LCT + 线段树】
题目 Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这 ...
- java面试题之为什么hashmap的数组初始化大小都是2的N次方?
当数组长度为2的N次方时,不同的key算出的index相同的几率小,数据在数组上分配均匀,hash碰撞的几率小,提升查询效率,从大O(N)提升至O(1):
- 百度网络监控实战:NetRadar横空出世(上)
原文:https://mp.weixin.qq.com/s/VBShicsqReDtureKAdEgDA 转自订阅号「AIOps智能运维」,已授权运维帮转发 作者简介:运小贝,百度高级研发工程师 负责 ...
- Java-河内塔问题
河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市:1883年法国数学家 Edouard Lucas曾 ...
- 重复造轮子之RSA算法(一) 大素数生成
出于无聊, 打算从头实现一遍RSA算法 第一步, 大素数生成 Java的BigInteger里, 有个现成的方法 public static BigInteger probablePrime(int ...
- Codeforces 622F The Sum of the k-th Powers(数论)
题目链接 The Sum of the k-th Powers 其实我也不懂为什么这么做的……看了无数题解觉得好厉害哇…… #include <bits/stdc++.h> using n ...
- SPOJ 1825 Free tour II (树的点分治)
题目链接 Free tour II 题意:有$N$个顶点的树,节点间有权值, 节点分为黑点和白点. 找一条最长路径使得 路径上黑点数量不超过K个 这是树的点分治比较基本的题,涉及树上启发式合并……仰望 ...
- DTrace Oracle Database
http://d.hatena.ne.jp/yohei-a/20100515/1273954199 DTrace で Oracle Database のサーバー・プロセスをトレースしてみた Oracl ...
- javascript --- 多重继承
多重继承就是指,一个子对象中有不止一个父对象的继承模式. 想要实现她,还是非常简单的,而我们只需要延续属性拷贝的继承思路依次扩展对象即可,而对参数中所继承的对象没有限制. function multi ...
- Android 动态生成对话框和EditText
/** * (获取输入) */ private void showInputDialog() { ScrollView scrollview = getInitView() ; final Linea ...