热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Memcached学习笔记—第六部分Memcached缓存模型

为什么80%的码农都做不了架构师?缓存机制:SlabAllocationmemcached默认情况下采用了名为SlabAllocator的机制分配

为什么80%的码农都做不了架构师?>>>   hot3.png

 

缓存机制: Slab Allocation

 

memcached 默认情况下采用了名为 Slab Allocator 的机制分配、管理内存。 Slab Allocator 的基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块, 以完全解决内存碎片问题。 slab allocator 还有重复使用已分配的内存的目的。 也就是说,分配到的内存不会释放,而是重复利用。

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

 

 

Slab Allocation 的构造图

 

 

Page

分配给 Slab 的内存空间,默认是 1MB 。分配给 Slab 之后根据 slab 的大小切分成 chunk 。

Chunk

用于缓存记录的内存空间。

Slab Class

特定大小的 chunk 的组。

 

Slab 中缓存记录的原理

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

 

选择存储记录的组的方法

 

Slab Allocator 的缺点

Slab Allocator 解决了当初的内存碎片问题,但新的机制也给 memcached 带来了新的问题。

这个问题就是,由于分配的是特定长度的内存,因此无法有效利用分配的内存。 例如,将 100 字节的数据缓存到 128 字节的 chunk 中,剩余的 28 字节就浪费了

 

chunk 空间的使用

 

对于该问题目前还没有完美的解决方案。如果预先知道客户端发送的数据的公用大小,或者仅缓存大小相同的数据的情况下, 只要使用适合数据大小的组的列表,就可以减少浪费。

 

参考:http://tech.idv2.com/2008/07/11/memcached-002/

 


转:https://my.oschina.net/acooly/blog/770252



推荐阅读
author-avatar
手机用户2602885151
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有