`

Memcached原理分析

 
阅读更多

Memcached的内存管理方式

Memcached采用了名为Slab Allocation的机制分配,管理内存。

Slab Allocation的原理相当简单。将分配的内存分割成各种尺寸的块(chucnk),并把尺寸相同的块分成组(chucnk的集合)如图:



而且slab Allocation还有重复使用已分配内存的目的。也就是说,分配到的内存不会释放,而是重复利用。
Slab Allocation 的主要术语

  • Page :分配给Slab 的内存空间,默认是1MB。分配给Slab 之后根据slab 的大小切分成chunk.
  • Chunk : 用于缓存记录的内存空间。
  • Slab Class:特定大小的chunk 的组。

 

在Slab 中缓存记录的原理

Memcached根据收到的数据的大小,选择最合适数据大小的Slab (图2) memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中。

 

 

Memcached在数据过期与删除

Memcached内部不会监视记录是否过期,而是在get此条记录时查看其时间戳,检查记录是否过期。这种技术称为lazy expiration.因此memcached不会再过期监视上耗费CPU时间。

添加新数据时,Memcached会优先使用已超时的记录空间,如果空间不足,此时就要使用名为Least Recently Used (LRU最近最少使用)机制来分配空间。因此当memcached的内存空间不足时(无法从slab class)获取到新空间时,就从最近未使用的记录中搜索,并将空间分配给新的记录。

 

Memcached的分布式原理

Memcached是通过客户端来实现分布式的,以新数据(键值对)的键通过一定的算法选择一个服务器,保存在此服务器的Memcached中。

例如:

向memcached中添加“tokyo”。将“tokyo”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。服务器选定后,即命令它保存“tokyo”及其值。同样,“kanagawa”“chiba”“saitama”“gunma”都是先选择服务器再保存。接下来获取保存的数据。获取时也要将要获取的键“tokyo”传递给函数库。函数库通过与数据保存时相同的算法,根据“键”选择服务器。使用的算法相同,就能选中与保存时相同的服务器,然后发送get命令。只要数据没有因为某些原因被删除,就能获得保存的值。

 
这样,将不同的键保存到不同的服务器上,就实现了memcached的分布式。 memcached服务器增多后,键就会分散,即使一台memcached服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。

 

http://www.cnblogs.com/sunniest/p/4437806.html

分享到:
评论

相关推荐

    Memcached内存分析、调优、集群

    Memcached内存分析、调优、集群,memcached,包括使用memcached,原理,集群,和性能调优

    memcached源代码分析

    **memcached源代码分析** **一、memcached简介** memcached是一款高性能、分布式内存对象缓存系统,用于在分布式环境中快速存储和检索数据。它通过将数据存储在内存中,提高了应用程序的性能,减少了对数据库的...

    Memcached深度分析.docx

    **Memcached深度解析** Memcached是由danga.com(LiveJournal的技术团队)开发的一款分布式内存对象缓存系统,其...通过深入研究其源代码和工作原理,我们可以更好地优化和扩展Memcached的功能,满足特定的业务需求。

    memcached全面剖析.pdf

    - **在Slab中缓存记录的原理**: 当数据被添加时,memcached会将其放入最适合的slab中。如果当前没有合适大小的slab,则创建新的slab。 - **Slab Allocator的缺点**: 主要包括内存碎片问题和未使用的内存无法回收等。...

    memcached代码分析详解.docx

    《memcached代码分析详解》 在信息技术领域,缓存系统起着至关重要的作用,而memcached作为一款轻量级、高性能的分布式...深入了解其内部工作原理,有助于我们在实际应用中更好地利用memcached,提升系统的整体性能。

    Memcached深度分析

    为了更好地理解Memcached的工作原理,下面将从源代码的角度进行分析。 ##### 3.1 启动与守护进程模式 - **守护进程模式**:Memcached可以通过添加`-d`参数来以守护进程的形式启动。这种模式下,Memcached会在后台...

    查看、分析memcached使用状态

    通过两篇文章《Memcache 和 mysql 交互流程操作原理》和《让 memcached 和 mysql 更好的工作》,我们可以深入了解如何使用 Memcached 与 MySQL 配合工作。 为了监控和分析 Memcached 的运行状态,我们可以利用其...

    memcached-1.5.4

    **memcached-1.5.4源码分析与编译指南** `memcached`是一款高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过将数据存储在内存中,实现快速读取,避免了频繁...

    danga memcached使用

    Danga是memcached最初的开发者,其开源项目对理解memcached的工作原理非常有帮助。源码分析可以帮助我们了解: 1. **网络通信机制**:如何通过TCP/IP处理客户端的请求。 2. **内存管理**:如何分配和释放内存,以及...

    memcached-笔记资料

    2. "memcached权威指南.pdf":这是一份全面介绍Memcached的参考资料,可能包括了Memcached的工作原理、配置选项、API接口、性能调优、故障排查等方面的内容,适合初学者和进阶用户阅读。 3. ...

    Memcached缓存技术资料源码

    本文将深入探讨Memcached的基本概念、工作原理、安装配置、使用方法以及源码分析。 **一、Memcached基本概念** 1. **缓存**: 缓存是一种存储技术,用于临时存储频繁访问的数据,减少对后端慢速存储(如数据库)的...

    Getting started with memcached

    #### 二、Memcached的工作原理 1. **客户端-服务器架构**:Memcached采用客户端-服务器架构,其中客户端向Memcached服务器发送请求,服务器负责处理这些请求并将结果返回给客户端。 2. **键值存储**:Memcached以...

    找到一个memcached分析文档

    标题中的“memcached分析文档”指的是对开源内存对象缓存系统Memcached的深入解析或研究材料。Memcached是一个高性能、分布式的内存对象缓存系统,它用于减轻数据库负载,通过缓存数据和对象来减少数据库访问。这个...

    memcache源代码分析

    **memcached 源代码分析** memcached 是一个高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减少数据库访问压力,提高应用程序的响应速度。它的工作原理是将数据存储在内存中,通过键值对的形式进行...

    最新版Memcached for windows + 源码

    4. **Memcached与源码分析** - 源码阅读可以帮助开发者理解Memcached的内存管理、数据结构、网络通信等核心部分,为自定义扩展或优化提供基础。 - Memcached的内存管理采用了slab分配器,将内存划分为不同的slabs...

    监控memcached运行情况

    5. **源码分析**:对于深入理解Memcached的工作原理,有时需要查看其源码。这可以帮助我们识别性能瓶颈,或者定制化监控解决方案。 6. **扩展性与优化**:当单个Memcached实例无法满足需求时,可能需要考虑集群部署...

    memcached 64 位免费下载

    10. **应用场景**:除了Web应用,memcached还适用于API缓存、实时数据分析、数据库查询缓存等多种场景。 总结来说,memcached是一个强大的分布式内存缓存工具,它能够有效地提升Web应用的性能,通过合理使用和配置...

    memcached源码

    **memcached源码分析** `memcached`是一个高性能、分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升应用性能。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站的响应速度。本文...

Global site tag (gtag.js) - Google Analytics