Memcached数据存储方式
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数据存储方式的更多相关文章
- memcached实战系列(六)理解Memcached的数据存储方式
Memcached的数据存储方式被称为Slab Allocator,其基本方式是: 1:先把内存分成很多个Slab,这个大小是预先规定好的,以解决内存碎片的问题.启动参数的时候配置进去的不懂得可以参考 ...
- Kooboo CMS技术文档之三:切换数据存储方式
切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...
- Android数据存储方式--SharedPreferences
Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...
- iOS 应用数据存储方式(XML属性列表-plist)
iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) ...
- 安卓中的数据存储方式以及ContentProvider的简单介绍
1.介绍android的数据存储方式 File存储 sharedPrefrence存储方式 conmtentprovider sqlitedatabase 网络存储 2.请介绍下ContentPr ...
- ios中常见数据存储方式以及SQLite常用的语句
在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults 将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...
- iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)
iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存 ...
- iOS开发UI篇—ios应用数据存储方式(偏好设置)
iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...
- iOS开发UI篇—ios应用数据存储方式(归档)
iOS开发UI篇—ios应用数据存储方式(归档) 一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...
随机推荐
- JavaWeb -- Struts2 ResultType细化, 国际化
1. ResultType细化 <result-types> <result-type name="chain" class="com.opensymp ...
- SQL命令查询Oracle存储过程信息(代码内容等)
SELECT * FROM ALL_SOURCE where TYPE='PROCEDURE' AND TEXT LIKE '%0997500%'; --查询ALL_SOURCE中,(脚本代码)内 ...
- Python subplot 绘画
环境 Anaconda3 Python 3.6, Window 64bit 目的 利用 matplotlib 画图模块,汇至子图 # -*- coding: utf-8 -*- import matp ...
- C++ 学习使用
1.C++已经不太建议用#define const用法 定义小函数,不改变内部成员的可以用inline 2.namespace使用 3.C语言预处理 #define这些的使用 #pragma once ...
- python3.7安装模块MySQLdb报错error: Microsoft Visual C++ 14.0 is required.
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools&quo ...
- CodeForces 385 D.Bear and Floodlight 状压DP
枚举灯的所有可能状态(亮或者不亮)(1<<20)最多可能的情况有1048576种 dp[i]表示 i 状态时灯所能照射到的最远距离(i 的二进制中如果第j位为0,则表示第j个灯不亮,否则就 ...
- sha1加密
SHA-1是一种数据加密算法,该算法的思维是接纳一段明文,然后以一种不可逆的方式将它转换成一段(一般更小)密文, 也能够简略的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短.位数固定的 ...
- 广义线性模型(GLM)
一.广义线性模型概念 在讨论广义线性模型之前,先回顾一下基本线性模型,也就是线性回归. 在线性回归模型中的假设中,有两点需要提出: (1)假设因变量服从高斯分布:$Y={{\theta }^{T}}x ...
- Android学习之Activity跳转与传值
Activity跳转与传值,主要是通过Intent类,Intent的作用是激活组件和附带数据. 一.Activity跳转 方法一 Intent intent = new Intent(A.this, ...
- 最新海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明
本文档主要介绍海康威视设备预览.回放.流媒体取流的RTSP URL和IE直接预览.回放的HTTP URL. RTSP为取流协议,取到码流后需要解码显示,可以通过VLC播放器进行测试,IE等浏览器网页不 ...