一:memached简介
在许多高并发的应用中,把业务数据保持久化 ( 保存到数据库,磁盘文件或其它 ) 后,应用从持久化设备中读取数据并在浏览器中显示,随用户量,数据量增大,访问的集中,会出现持久化设备负担过重(典型的就是数据库),影响应用响应速度,应用延迟严重等重大问题。典型的应用就是 WEB 应用中的高并发网站。
这时候应用就需要一种缓存机制来提高并发读取速度的性能 , memcached 能在大中型系统中提供优秀的缓存服务。 memcached 是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。
memcached 是以 LiveJournal 旗下 Danga Interactive 公司的 Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi 、 hatena 、 Facebook 、 Vox 、 LiveJournal 等众多服务中提高 Web 应用扩展性的重要因素。
二:memached产生的背景
对于大数据、高并发、高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题。当一个数据池连接数峰值已经达到500的时候,那运行的程序离崩溃的边缘也不远了。很多小网站的开发人员一开始都将注意力放在了产品需求设计上,缺忽视了程序整体性能,可扩展性等方面的考虑,结果眼看着访问量一天天往上走,可突然发现有一天网站因为访问量过大而崩溃了,后果是非常严重的。
大家都知道,当有一个request过来后,web服务器交给app服务器,app处理并从db中存取相关数据,但db存取的花费是相当高昂的。特别是每次都取相同的数据,等于是让数据库每次都在做高耗费的无用功,数据库如果会说话,肯定会发牢骚,你都问了这么多遍了,难道还记不住吗?是啊,如果app拿到第一次数据并存到内存里,下次读取时直接从内存里读取,而不用麻烦数据库,这样不就给数据库减负了?而且从内存取数据必然要比从数据库媒介取快很多倍,反而提升了应用程序的性能。
因此,我们可以在web/app层与db层之间加一层cache层,主要目的:
1. 减少数据库读取负担;
2. 提高数据读取速度。而且,cache存取的媒介是内存,而一台服务器的内存容量一般都是有限制的,不像硬盘容量可以做到TB级别。所以,可以考虑采用分布式的cache层,这样更易于破除内存容量的限制,同时又增加了灵活性。
三:Memcached的工作原理
Memcached处理的原子是每一个(key,value)对(以下简称kv对),key会通过一个hash算法转化成hash-key,便于查找、对比以及做到尽可能的散列。同时,memcached用的是一个二级散列,通过一张大hash表来维护。
四:memcached 主要特点
开源
memcached服务器是一个很大的哈希表
显著减少数据库负载。
非常适合高负载的数据库网站。
从技术上来说,它是在通过TCP或UDP在服务器和客户端之间来访问。
五:Memcache各类数据操作原理
1,查询数据(select),首先通过指定的Key查询 (get)Memcache中间缓存层数据,如果存在相对应数据,则直接获取出数据结果,查询过程完全不需要查询数据库。如果不存在,则查询MySQL数 据库,并以key对应value的形式将查询结果存储在Memcache缓存数据中,然后将结果返回给查询语句。
2,更新 数据(update),首先更新数据,然后删除相关的memcache数据(delete)。
3,增加 数据(add),首先删除相关缓存数据,然后增加数据。
4,删除数据(delete), 删除数据,并删除Memcache数据。
六:不要使用memcached来做什么
持久性数据存储
数据库
特殊应用
大对象缓存
容错或高可用性