1. memcached的数据存储方式被称为Slab Allocator,其基本方式是:

①:先把内存分成很多Slab,这个大小是预先规定好的,已解决内存碎片的问题。分配给Slab的内存空间被称为Page,默认为1M。一个Slab下可以有多个Page。

内存分成多个Slab-->Slab分成多个Page(Page默认为1M)-->Page分成多个Trunk

②然后把一个Page分成很多个chunk块,chunk块用于缓存记录的空间,chunk的大小是先有一个基本值,然后根据增长因子来增大

③slab class:内存区类别(48byte-1M),每个类别有一个slab clasid

④memcached里面保存着slab内空闲的chunk列表,当收到要保存item的时候,它会根据item的大小,去选择一个最合适的slab,然后找到空闲的chunk,把数据存放进去。

2. 新建item分配内存过程

①快速定位slab classid ,先计算item长度=key键长+flag+suffix(17/16字节)+value值长+结构大小(32字节),如90byte 如果>1MB,无法存储丢弃,取最小冗余的slab class 如 48,96,120,存30会选择96(stats slab)

3.按顺序寻找可用chunk

①slot:检查slab回收空间slot里面是否有剩余chunk

delete:delete是标记到slot

exptime: get时检查的过期对象标记到slot

②end_page_ptr:检查page中是否有剩余chunk

③memory:内存还有剩余空间可以用于开辟新的slab

④LRU

4.memcached的数据存储方式的缺点:

由于chunk的大小是预先分配好的特定长度,因此如果数据不能完全填满chunk,那么剩余的空间就浪费了

5.lazy expiration(延迟/惰性 过期)

memcached不会监控是否过期,而是在外部来获取数据的时候,才检查记录的时间戳,因此成为lazy expiration

6.LRU(least recently userd 最近最少使用)

当空间不足的时候,memcached会优先使用已经过期的数据空间,如果还不够,那么就会把最近最少使用的对象的空间释放出来使用

7.懒惰删除机制

删除item对象时,不释放内存,作删除标记,指针放入slot回收插槽,次分配的时候直接使用

注意:memcached的LRU不是全局的,而是针对slab的,可以说是区域性的

Memcached数据存储方式的更多相关文章

  1. memcached实战系列(六)理解Memcached的数据存储方式

    Memcached的数据存储方式被称为Slab Allocator,其基本方式是: 1:先把内存分成很多个Slab,这个大小是预先规定好的,以解决内存碎片的问题.启动参数的时候配置进去的不懂得可以参考 ...

  2. Kooboo CMS技术文档之三:切换数据存储方式

    切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...

  3. Android数据存储方式--SharedPreferences

    Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...

  4. iOS 应用数据存储方式(XML属性列表-plist)

    iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) ...

  5. 安卓中的数据存储方式以及ContentProvider的简单介绍

    1.介绍android的数据存储方式 File存储 sharedPrefrence存储方式 conmtentprovider sqlitedatabase 网络存储   2.请介绍下ContentPr ...

  6. ios中常见数据存储方式以及SQLite常用的语句

    在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults  将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...

  7. iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)

    iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存 ...

  8. iOS开发UI篇—ios应用数据存储方式(偏好设置)

    iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...

  9. iOS开发UI篇—ios应用数据存储方式(归档)

    iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...

随机推荐

  1. AttributeError: module 'matplotlib' has no attribute 'verbose' (pycharm中使用matplotlib 2.2.0的坑)

    AttributeError: module 'matplotlib' has no attribute 'verbose' 环境信息 本地系统:win10 本地开发环境:python(3.6.3), ...

  2. Java中的比较运算符

    比较运算符用于判断两个数据的大小,例如:大于.等于.不等于.比较的结果是一个布尔值( true 或 false ). Java 中常用的比较运算符如下表所示: 注意哦: 1.  > . < ...

  3. U盘安装OS

    1. 老毛桃 2. 大白菜 3.

  4. 十二道MR习题 - 3 - 交集并集差集

    题目 有两个文件A和B,两个文件中都有几百万行数字,现在需要找出A文件和B文件中数字集合的交集.并集.以及A对B的差集. 简单说一下思路: 这个问题关键在于key和value的设计.这里我将文件中的数 ...

  5. ssh整合学习(1)

    Hibernate框架 1 hibernate核心配置文件 (0)orm思想 -对象关系映射 (1)数据库信息 (2)hibernate信息 (3)映射配置 (4)hibernate核心配置文件 -如 ...

  6. 用JS判断IE版本的代码

    方法一: 复制代码代码如下: <script language="javascript"> function getIE() { if(navigator.appNam ...

  7. koa2使用&&中间件&&angular2的koa托管

    文章导航 1,koa2使用: 2,写中间件: 3,koa2路由配置angular2; 一.先上代码,一篇,看完koa2中大多基础方法: const Koa=require('koa'); const ...

  8. centos下使用fdisk扩展分区容量大小

    硬盘空间为20G,VMware增加磁盘大小,需要再增加10G空间 扩展完后,重启系统,再次使用fdisk -l查看,会发现硬盘空间变大了: 重新创建分区,调整分区信息 本次实验主要对/dev/sda4 ...

  9. Kinect 2.0 默认姿势的中文意思

    RaiseRightHand/RaiseLeftHand 抬起左右手高于肩膀一秒Psi 举起双手高于肩膀一秒Tpose T姿势Stop 右手放下,左手缓慢贴住身侧(腰以下)或者左右调换Wave 挥手 ...

  10. 网站flash效果遭360急速浏览器拦截

    网站flash效果遭遇360急速浏览器拦截,经分析,本地的一个css文件叫做advertisement.css  结果被360急速浏览器给毙了.改成其他名字就ok了.