Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7094292
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类: 高性能计算

2015-06-15 06:32:58

Memcached的内存管理方式

[日期:2015-06-14] 来源:Linux社区  作者:Linux [字体:  ]

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服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。

Memcached 安装及启动脚本 

PHP中使用Memcached的性能问题 

下安装Memcached及命令解释 

Memcached的安装和应用 

使用Nginx+Memcached的小图片存储方案 

Memcached使用入门 

Memcached 的详细介绍
Memcached 的下载地址

本文永久更新链接地址

阅读(1067) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~