memcached初探.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:4 大小:23KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

memcached初探.doc

memcached初探.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

memcached初探博客分类:博客分类:?memcachedmemcached机制算法一般的web应用,我们直接从数据库取数据.但是随着数据的增多,访问量的增大,数据库的响应变慢,网站延迟等现象就会出现.此刻是memcached大显身手的时候了,memcached是高性能的分布式内存缓存服务器。通过它把数据缓存起来,从而减少对数据库的访问次数,以提高Web应用的响应速度、提高可扩展性。这次主要对memcached的基本特性加以了解,以便在以后的项目中更好的利用它.1.memcached大体认识Memcached是一个基于存储键/值对的hashmap。其守护进程(daemon)是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。2.memcached的存储机制最近的memcached默认情况下采用了名为SlabAllocator的机制分配、管理内存。在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的。但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下,会导致操作系统比memcached进程本身还慢。SlabAllocator就是为解决该问题而诞生的。SlabAllocation的原理相当简单。将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合)如下图:而且,slaballocator还有重复使用已分配的内存的目的。也就是说,分配到的内存不会释放,而是重复利用。memcached根据收到的数据的大小,选择最适合数据大小的slab。memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中。如下图:SlabAllocator解决了当初的内存碎片问题,但新的机制也给memcached带来了新的问题。这个问题就是,由于分配的是特定长度的内存,因此无法有效利用分配的内存。例如,将100字节的数据缓存到128字节的chunk中,剩余的28字节就浪费了。如下图:如果预先知道客户端发送的数据的公用大小,或者仅缓存大小相同的数据的情况下,只要使用适合数据大小的组的列表,就可以减少浪费。所以,我们需要根据我们要存储的内容,来调节缓存块的大小。这个块的大小memcached有个默认值。memcached在启动时指定GrowthFactor因子(通过-f选项),就可以在某种程度上控制slab之间的差异。默认值为1.25。让我们用以前的设置,以verbose模式启动memcached试试看:$memcached-f2-vv下面是启动后的verbose输出:slabclass1:chunksize128perslab8192slabclass2:chunksize256perslab4096slabclass3:chunksize512perslab2048slabclass4:chunksize1024perslab1024slabclass5:chunksize2048perslab512slabclass6:chunksize4096perslab256slabclass7:chunksize8192perslab128slabclass8:chunksize16384perslab64slabclass9:chunksize32768perslab32slabclass10:chunksize65536perslab16slabclass11:chunksize131072perslab8slabclass12:chunksize262144perslab4slabclass13:chunksize524288perslab2可见,从128字节的组开始,组的大小依次增大为原来的2倍。这样设置的问题是,slab之间的差别比较大,有些情况下就相当浪费内存。因此,为尽量减少内存浪费,两年前追加了growthfactor这个选项。来看看现在的默认设置(f=1.25)时的输出slabslabslabslabclassclassclassclass2:3:4:5:chunkchunkchunkchunksizesizesizesize112144184232perslabperslabperslabperslab93627281569845193.memcached删除机制memcached是缓存,所以数据不会永久保存在服务器上,但数据不会真正从memcached中消失,memcached不会释放已分配的内存。