缓存学习笔记(二)—— memcached的内存存储和删除机制

上节对memcached有了基本的了解,本节将了解 memcached 的内部构造的实现方式,以及内存的管理方式。

一、Slab Allocation机制:整理内存以便重复利用

目前memcached采用Slab Allocation机制来管理内存,在这之前,其采用原始的malloc和free的方式来进行内存的管理,这种情况会造成大量的内存碎片,非常不利于内存的管理,加重操作系统内存管理器的负担。Slab Allocation机制就为解决这种问题而生。
Slab Allocation预先将内存分成各种尺寸的块,来解决内碎片的问题。其原理也比较简单,就是将相同尺寸的块分成组。
在这里插入图片描述此外,分配的内存不会释放,而是重复利用。
Slab Allocation术语:

  1. page 分配给Slab的内存空间
  2. chunk 用于缓存数据的内存空间
  3. Slab Class 特定尺寸的chunk组

二、Slab中缓存数据的原理

Slab通过客户端发送的数据来选取特定的Slab class,然后用其中空闲的chunk来存取数据。
在这里插入图片描述同时这也是Slab Allocation的一个缺点,可以发现如果只是存取100 byte的话,那么其中有12个byte就会被浪费,不能完全利用内存空间。
这里可以采用Growth Factor进行调优,感兴趣的话,可以自行了解这部分内容。

三、Memcached的删除机制及发展方向

memcached在删除数据方面有效的利用了资源。memcached不会释放内存空间,当数据过期之后,客户端就就不会在看到这条记录,其存储空间可以重复利用。除此之外,memcached采用的是lazy expiration的过期机制,即memcached不会利用后台资源监测过期时间,而是在get的时候获取时间戳,查看其是否过期。

1、从缓存中有效删除数据的原理

MemCached会优先使用缓存过期的空间,但即使这样,也会发生追加新记录空间不够的情况。此时就需要使用LRU策略来剔除掉一些数据。

2. Memcached最新发展方向

其主要有两大发展方向,一个是二进制协议方向,另外一个是外部引擎的加载功能。

  1. 对于二进制协议,他不需要像文本协议那样解析处理,使原本性能更高的memcached更上一层楼
  2. 希望memcached可以支持持久化,以及加载硬盘保存的数据
发布了66 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Time__Lc/article/details/103629735