关于Memcached,主要说两点:
1,为什么会出现Memcached。
2,Memcached的定位。
让我们一一来分析。
1,为什么会出现Memcached。
据史料记载(http://en.wikipedia.org/wiki/Memcached),第一代Memcached诞生于公元2003年5月,服务端由Danga Interactive
使用C语言开发,客户端可以使用任何语言来编写,它们之间通过socket通讯。
该软件用于提升LiveJournal.com访问速度。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。
那么,在03年,当时的互联网是一个什么状态?当时的互联网技术又是一个怎样的状态?
俺不知道。谁能给点历史?
要想知道为什么要开发或使用Memcached,得从IO密集型说起。
IO密集型是指读写非常频繁,在短时间内呈现高并发的状态,使得性能下降。
IO密集型操作涉及客户端,中间层,服务端,因此可以从这三个点进行缓解:
a,减少客户端的请求。比如像秒杀这样的活动,是一个高并发的场景,可以在前面设一个临界值,超过临界值则给一个返回提示。
b,减少中间层的消耗,提升中间层的性能。比如使用mysql的handlersocket插件,它省去了很多多余的mysql操作,使得其查询性能比memcached快2倍,比mysql快7.5倍。
c,分离服务端的数据。将服务端的数据分离,则可以直接把IO给分离(即读写分离),使得数据库的负载大大降低。
而从memcached的实际效果来看,它显然是分化了IO的读取请求,注意,是读取请求,而不是写。因为每次朝memcached写一次之后,还得朝数据库写一次以保持数据的一致,数据库的写入压力并未减少。
也就是说,memcached缓解的,是数据库的读取压力,这才是为什么要使用memcached的原因。
2,Memcached的定位是什么。
IT行业的本体是数据,而IT系统,不过是数据的载体。
这就好比我们人类社会,有着各自各样的楼房,但这些楼房主要是人居住的容器,人们在不同的建筑之间穿梭,就好比数据在不同的系统中出入一样。
因此考察一个系统的定位,总是以与其关联的数据为依据。
即首先考察该系统中数据的定位,然后才是系统本身的定位。
Memcached是处在传统关系数据库与应用服务之间的一个中间层。
从宏观层面看,它就像数据长河中的一个分支,与数据库这种大型“数据湖泊”相比,它就是一个小型湖泊。
由于其处于数据库层之上,因此其稳定性要低一些,数据的变动性更大,数据的生命周期也就更短了。
若排除Memcached与其它系统的关系,直接观察它,可以发现它只是一个数据容器。
数据按hash的方式放在这个容器里面,而且对数据的类型、大小、容量、生命周期都有所限定。
Memcached数据特点:
体积:Memcached的内存结构采用Slab Allocator机制,据说能避免内存碎片,而这也导致其只能存储小型数据(最大不能超过1M)。这个限制可以改。
周期:数据最多只能存活30天。当然这个限制也能改。
容量:由于其LRU也是建立在这个Slab Allocator机制上,导致了其容量过大时会有一个问题:命中率问题。即如果要存储达千万级的数据量,那么LRU时就可能出现问题,导致后面的数据覆盖前面已经添加的数据。当然可以通过某些调整基本解决这个问题。
分布:理论上是可以无限扩展。但Facebook在2008年已经有超过800台memcached服务器,他们已经发现了memcached存在的一些问题,他们称为Multiget Hole,即增加memcached服务器并不能增加处理容量。这个据说也有办法解决。
故可以得出Memcached中数据的一个定位(相对于数据库而言):小型短命的活跃对象。
因此Memcached系统的定位也可以设定:小型大容量数据的分布式缓存系统。
分享到:
相关推荐
Linux下的memcached软件安装包,包含依赖的libevent类库,另外附带安装步骤,本人亲测,centos 6.3下完美安装。
tcprstat:服务器时延统计工具,在内部功能基础上,增加时延阈值统计,记录超过阈值的包个数,并把数据包...可以以在线方式和离线方式分析redis,memcached,mysql,nginx等请求应答系统的时延,并定位慢响应数据报文。
3、协助并快速定位及解决开发及运行过程中的技术问题。 项目技能 1、JAVA基础扎实,良好的面向对象编程思想;熟练使用Tomcat、Nginx等应用服务器; 2、熟练使用Spring, SpringMVC, Hibernate等流行的开发框架,理解...
支持的缓存后端有:文件APC Memcached Redis CakePHP缓存库缓存库提供了一个缓存服务定位器,可使用一个简单易用的接口与多个缓存后端进行接口连接。 支持的缓存后端有:文件APC Memcached Redis Wincache Xcache...
缓存策略:在合适的地方引入缓存机制(如Redis、Memcached)提高系统性能。 分页与批量处理:对于大数据量的处理,采用分页或流式处理,减轻服务器压力。 服务化架构:采用微服务架构,将复杂系统拆分为多个独立可...
在我们将站点从 ASP.NET + Windows 迁移至 ASP.NET Core + Linux 的过程中,目前遇到的最大障碍就是 —— 没有可用的支持 .NET Core 的 memcached 客户端。 我们一直用的是 EnyimMemcached ,在没有其它选择的情况下...
百度地图开发java源码 SJBlog 基于Java EE平台开发的个人博客。...Memcached Distributed Memory Object Caching System - MySQL Connector J - Quartz Job Scheduler - Spring Framework 3 - Struts
XGCMS定位高负载,即使动态模式也可以承受极高的数据量和访问量。 安全稳定 XGCMS的每行代码都非常注重安全,安全性非常高 AOP插件机制无需修改源代码,利用插件即可插入MVC层的任意地方 MVC模式 系统结构清晰...
这可能是 MongoDB 实例、PostgreSQL 数据库、像 Amazon S3 这样的二进制存储、像 New Relic 这样的指标收集服务、RabbitMQ 或 ActiveMQ 消息队列、基于 Memcached 或 Redis 的缓存、FTP 服务、电子邮件服务或任何...
添加数据类型'exstrtype',和原始字符串分类,其值上可以指定版本,从而可以方便的实现分布式锁等功能,同时值上还可以设置标记,以支持memcached协议CAS / CAD-Redis原生字符串的增强命令详解中国科学院语法及...
就像见多了摄影的美景后自己也想去那走一走,所以JEA诞生了,它有一个简陋的样例项目(JEA定位为面向服务的分布式集成开发框架,要完全发挥JEA的各项特性,需要准备多台服务器分别部署应用和支撑系统,如果要商用,...
6、支持Redis/Memcached 7、支持Linux/Unix/Windows服务器,支持Apache/IIS/Nginx等 8、支持电脑PC端、手机端(微信端)、小程序 DSMall商城系统功能: 1、设置:站点设置、账号同步、上传设置、SEO设置、邮箱短信...
优化了 Memcached支持。将 libmemcached 的内存分配器改成了易语言统一申请内存的方式。 修复了URI解析过程的一个逻辑陷阱。兼容中文等情况的URI二次解析可能出现的问题。 修复了XML解析等情况下得到的文本内容超出...
百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对...
Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 ...