`

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

 
阅读更多

 

缓存机制: 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/

 

  • 大小: 11.8 KB
  • 大小: 7 KB
  • 大小: 11.8 KB
分享到:
评论

相关推荐

    Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

    本篇学习笔记将重点介绍如何在Java环境中使用gwhalin提供的Memcached客户端进行开发。gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、...

    memcached-笔记资料

    【标题】"memcached-笔记资料"涉及到的核心知识点是分布式内存缓存系统——Memcached,它是一个高性能、轻量级的缓存解决方案,主要用于减轻数据库的负载,提高Web应用的性能。 【描述】"memcached-笔记资料"暗示了...

    韩顺平 PHP Memcached缓存技术资料源码笔记图解PPT_Ady

    【PHP Memcached缓存技术详解】 在Web开发中,数据缓存是一种常用的技术手段,用于提升网站性能,减少数据库负载。PHP Memcached扩展是PHP与Memcached缓存服务器交互的一个接口,它允许开发者将数据存储在内存中,...

    Memcached 学习资料(memcached Memcached使用手册 Memcached源码剖析笔记)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    memcached-笔记资料.rar

    标题 "memcached-笔记资料.rar" 暗示了这个压缩包包含的是关于 memcached 的学习资料,这是一款广泛使用的分布式内存对象缓存系统。它主要用于减轻数据库的负载,通过在内存中存储常用数据,提高应用程序的响应速度...

    memcached教程.PPT.笔记.软件

    6. **PPT和笔记中的详细知识点** - **PPT内容**:可能涵盖Memcached的工作原理、使用场景、优势、常见问题及解决办法。 - **笔记**:可能记录了实际操作过程中的技巧、遇到的问题及解决方案,以及一些实战经验分享...

    redis 缓存技术学习笔记

    ### Redis缓存技术学习笔记 #### 一、Redis概述 Redis是一个开源的、高性能的键值存储系统。它提供了一种灵活的方式来进行数据管理和存储,适用于多种应用场景,如缓存、消息队列等。与传统的键值存储系统...

    【MyBatis学习笔记八】——MyBatis缓存.zip

    本篇笔记将深入探讨MyBatis的缓存机制,包括一级缓存和二级缓存的概念、工作原理、配置与使用。 一级缓存是SqlSession级别的缓存,每当执行一个SQL查询时,如果结果不在缓存中,MyBatis会将其放入一级缓存。当同一...

    redis学习笔记

    ### Redis 学习笔记知识点概览 #### 一、Redis 简介及特性 - **Redis**(Remote Dictionary Server)是一种开源的、基于内存的数据结构存储系统,它支持多种数据结构,如字符串(strings)、散列(hashes)、列表...

    memcached php

    Memcached是一种高性能、分布式内存缓存系统,常用于减轻数据库的负载,提升Web应用的响应速度。 描述中提到的是关于Memcached的安装文件、集群配置的图解文档(可能是.doc格式),以及PHP程序实现Memcached项目的...

    Laravel 5 学习笔记

    ### Laravel 5 学习笔记知识点汇总 #### 环境配置与初始化 - **环境配置**:在开始使用 Laravel 5 前,需要确保系统安装了 PHP、Composer 和其他必要的开发工具。 - **`.env` 文件**:这是一个包含应用配置参数的...

    Nginx学习笔记

    【Nginx学习笔记】 Nginx是一款由俄罗斯开发者Igor Sysoev设计的高性能、高并发的Web服务器和反向代理服务器。最初应用于俄罗斯知名网站www.rambler.ru,随后开源,采用类BSD许可,使得全球用户都能使用。Nginx以其...

    Java架构面试专题汇总(含答案)和学习笔记.zip

    以上只是Java架构面试中可能涉及的部分核心知识点,实际的压缩包文件可能还包括更多具体的面试题目、解答以及深度学习笔记,对于准备Java架构师职位的求职者来说,这些都是宝贵的参考资料。通过系统学习并实践这些...

    linux运维学习笔记:企业Shell面试题总结-1.pdf

    根据提供的文件信息,本文将总结其中的Linux运维学习笔记中提及的多个企业Shell面试题及其解决方案和知识点。 1. 批量生成随机字符文件名案例 该案例主要考察使用Shell脚本批量创建文件,并为每个文件赋予随机生成...

    胡伟煌 Linux学习笔记

    Linux学习笔记的知识点总结,涵盖了Linux文件系统、Linux介绍、Linux文件权限、Shell简介、运维工具、Ansible的使用、Supervisor的使用、Confd的使用、NFS的使用、ceph-fuse的使用、Git、Nginx、Keepalived、TCP/IP...

Global site tag (gtag.js) - Google Analytics