`
bit1129
  • 浏览: 1069635 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Memcached一】Memcached内存管理

 
阅读更多

Memcached是基于客户端的一致性Hash算法来实现分布式的K/V缓存,Memcached的特性是高效以及简单,但是不能用它来持久的存储数据,也就说,使用Memcached的时候,必须考虑,Memcached挂了的影响。Memcached使用简单,不过还是了解下Memcached的内存管理机制。

 

Memcached内存特点

  • 基于slab的内存分配策略
  • 基于LRU的内存清除策略
  • 基于Hash的Item检索策略(也就是说,Memcached很想是个大的Hashtable)

Memcached内存管理机制

与Memcached内存管理相关的三个概念有Slab、Page、Chunk

 

  • Slab

Memcached将内存分成多个Slab(每个Slab),每个Slab有一个类型,这个类型了这个Slab中的块的大小,比如第一类Slab中的块大小是从0到96字节,第二类Slab是从97字节到120字节,...第42类Slab。第一块大小(默认96字节)可以通过参数调整、块大小的增长因子也是可以调整的,默认是增长25%

 

  • Page

Page是Memcached内存分配单位,Memcached每次分配一个Page的内存空间,默认情况下,一个Page的大小是1M。这个Page具体分解分成多少块,是由把Page分配给的Slab类型决定的

 

  • Chunk

内存分配单位,不同的Chunk在不同类型的Slab中大小是不同的,但是在相同的Slab中是相同的


 

Memcached Slab、Page和Chunk



 



 

 

内存利用不充分

 如下图,180字节的item存放在Slab 4中,放下此Item后,还有12字节没被使用,但是这12个字节永远被浪费了,即使此后有小于12字节的Item来了,也不会放到这里,



 

 

Memcached的Item存储结构



Memcached内存结构图  

 
 

Memcached内存回收策略

  •  Memcached数据清除并不是真正的清除,对于已经过期的数据占据的空间不会被回收
  •  Memcached优先使用已经过期的空间
  •  Memcached在内存空间不足时,就会使用LRU算法进行空间分配,将最近最不常使用的空间 腾出来给刚加入的Item使用,那么这些被踢的数据去哪了??另外,Memcached进行LRU是针对Slab进行的,而不是针对整个内存进行
  •  Memcached的命中率,受存储的数据、键值、过期以及增长因子等因素的制约
  •  懒惰过期检测机制

       1. 不主动检测对象是否过期

       2. Get到某个Item后,判断其是否过期,如果过期则删除,但是不能释放内存

 

  •  懒惰删除机制

      1. Memcached数据清除并不是真正的清除,即不进行内存释放,但是用户永远看不到这个数据了,其存储空间可以重复利用。 此时,Memcached会写清除位,内存指针放入slot回收插槽,下次内存分配时,直接使用。


  • LRU

     Memcached使用LRU算法从内存中删除有效的缓存数据。Memcached优先使用已超时的缓存数据的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来 分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当Memcached的内存空间不足时(无法从slab class获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。

    从缓存的实用角度来看,该模型十分理想。 不过,有些情况下LRU机制反倒会造成麻烦。Memcached启动时通过“-M”参数可以禁止LRU,如下所示:  $ memcached -M -m 1024 启动时必须注意的是,小写的“-m”选项是用来指定最大内存大小的。不指定具体数值则使用默认值64MB。 指定“-M”参数启动后,内存用尽时Memcached会返回错误。话说回来,Memcached毕竟不是存储器,而是缓存,所以推荐使用LRU。     

 

 

Memcached常见问题

1. Memcached是否可以缓存超过1M的数据

可以,在启动Memcached时,需要指定-I参数,用于指定Memcached的最大的slab page(Memcached每次申请内存的大小是Page的大小,比如默认page是1M,那么Memcached每次申请大内存是1M)

2. Memcached的过期失效数据会回收内存吗?

不会。那么问题Memcached岂不是很快用完了??不会,虽然内存没有释放,但是数据会直接覆盖

3. Memcached如何进行LRU进行数据过期失效处理,并作相应的内存回收

 参见上面的LRU部分的描述

4. Memcached的Key的长度有什么限制?

Memcached的每个Key的长度不能超过250字节,并且Key是作为数据容量的一部分。

 

 

 

  • 大小: 200.7 KB
  • 大小: 479.1 KB
  • 大小: 379.2 KB
  • 大小: 403.3 KB
  • 大小: 952.1 KB
分享到:
评论

相关推荐

    Memcached源码分析之内存管理

    Memcached源码分析之内存管理Memcached源码分析之内存管理

    Memcached 客户端 服务端 管理工具

    综上所述,Memcached作为一个高效的内存缓存系统,通过客户端和服务端的协作,以及各种管理工具的辅助,可以有效地提升应用程序的性能和响应速度。在实际应用中,我们需要根据具体需求选择合适的客户端库,合理配置...

    Memcached 内存分析、调优、集群

    ### Memcached内存分析、调优、集群 #### 1. Memcached背景 Memcached是一款高性能的分布式内存对象缓存系统,旨在通过减轻数据库负载来加速动态Web应用的响应速度。它通过在内存中缓存数据和对象来减少读取数据库...

    memcached管理session资源

    MSM(Memcached_Session_Manager)是一个基于Java的Memcached会话管理器,它允许我们将Web应用的session数据存储在Memcached服务器上,而不是传统的保存在服务器的内存中或者硬盘上的session文件。这样,即使服务器...

    基于内存的K-V数据平台(Memcached)

    Memcached是一款高性能、分布式内存对象缓存系统,主要用于加速动态Web应用,通过将数据存储在内存中,减少数据库的访问次数,从而提高应用性能。它是一个轻量级的服务,设计简单且易于部署,支持多种编程语言的...

    Memcached内存分析、调优、集群

    ### Memcached内存分析、调优、集群:深入理解与实践 #### 1. Memcached背景与概述 Memcached是一款高性能的分布式内存缓存服务器,它最初由LiveJournal的运营人员开发,现已成为开源社区中不可或缺的一部分。其...

    memadmin一款管理memcached的图形工具

    总的来说,"memadmin"作为一款memcached的图形管理工具,为memcached的运维提供了极大的便利,使得memcached的管理和维护变得更加高效和直观。通过它的各种功能,用户可以更好地理解、优化和调试他们的缓存系统,...

    Memcached内存分配与SLAB机制

    SLAB机制是Memcached内存管理的关键组成部分,它通过一种特殊的缓存机制来存储item数据。这种机制能够有效地提高内存利用率并减少内存碎片,从而提高系统的整体性能。 **SLAB机制概述:** - **SLAB(Class)定义**...

    Memcached内存对象缓存

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

    tomcat+memcached 管理session

    `Tomcat`是一个流行的开源Java Servlet容器,而`Memcached`则是一个分布式内存对象缓存系统,常用于减轻数据库负载,提高应用性能。本篇文章将详细介绍如何使用`Tomcat`结合`Memcached`来实现高效的Session管理。 ...

    memcached 64位 window

    Memcached是一种分布式内存对象缓存系统,广泛用于减轻数据库负载,提高Web应用的性能。由于是64位版本,这意味着它可以利用64位系统的内存优势,处理更大的数据量。 **Memcached简介** Memcached是一款高性能、轻...

    计算机后端-PHP视频教程. Memcached12 memcached内存管理机制.wmv

    计算机后端-PHP视频教程. Memcached12 memcached内存管理机制.wmv

    memcached的内存分配代码

    Memcached是一种广泛使用的分布式内存对象缓存系统,它主要用于减轻数据库的负载,通过将数据存储在内存中,提高Web应用程序的响应速度。本文将深入探讨memcached的内存分配代码,理解其背后的机制,并讨论如何通过...

    memcached安装软件 libevent magent memcached

    Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载。它通过在内存中存储数据来提供快速的数据访问,从而提高应用的性能。本篇文章将详细讲解如何安装和配置memcached,...

    memcached高性能内存k-v缓存服务器

    memcached介绍 memcached安装 memcached操作 内存存储机制 数据过期与删除机制 php操作memcached 多服务器集群算法 缓存无底洞效应 缓存雪崩 老数据被踢现象 结课作业

    PHP内存缓存技术memcached 的安装和工作原理介绍

    4. **内存管理**:memcached管理内存空间,当内存不足时,会使用LRU(Least Recently Used)策略自动删除最近最少使用的数据。 5. **非持久化存储**:由于数据存储在内存中,一旦服务器重启,所有数据将丢失。因此,...

    memcached安装包以及MemCachedClient

    Memcached 是一款高性能的分布式内存缓存系统,用于在Web应用中减轻数据库负载。它将数据存储在内存中,以键值对的形式提供快速访问,尤其适用于高并发场景。Memcached 使用简单,可移植性强,广泛应用于多种编程...

    memcached服务器端memcached.exe 下载

    Memcached是一款高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提高Web应用的性能。它通过在内存中存储数据来快速访问,避免了反复读取硬盘上的数据,从而提高了应用程序的响应速度。 标题“memcached...

Global site tag (gtag.js) - Google Analytics