文档章节

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

loyal
 loyal
发布于 2016/05/05 21:49
字数 436
阅读 9
收藏 0

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

1:先把内存分成很多个Slab,这个大小是预先规定好的,以解决内存碎片的问题。启动参数的时候配置进去的不懂得可以参考memcached启动参数配置章节。

分配给Slab的内存空间被称为Page,默认是1M。一个Slab下可以有多个Page。

2:然后把一个Page分成很多个chunk块,chunk块是用于缓存记录的空间。Chunk的

大小是先有一个基本值,然后根据增长因子来增大。每一个pagechunk是相等的空间大小。

3:slab class:内存区类别(48byte-1M),每个类别有一个slab classId,图左边的,类似索引方便管理记录。

4:Memcached里面保存着slab内空闲的chunk列表,当收到要保存的item的时候,它

会根据item的大小,去选择一个最合适的slab,然后找到空闲的chunk,把数据存放进去。

 

比如我们存放120字节的值,有个chunk值为100还有一个chunk130,存到100chunk是没有足够空间存储的,存储到130这个chunk是可以的,最近的原则存储。但是存储到130chunk里面,也有一个问题就是浪费了10字节内存。所以合理的分配空间也是很重要的。

 

启动的时候添加参数:-vv注意小写的不是大写的。

./memcached -d -m 10 -u root -l 0.0.0.0 -p 18887-c 256 -P /tmp/memcached.pid -vv

如下图所示:

 

上面的图也印证了前面说的原理。确实是这样分配的。


本文转载自:http://blog.csdn.net/qq_30739519/article/details/51104419

loyal

loyal

粉丝 70
博文 69
码字总数 835
作品 0
技术主管
私信 提问
Nosql、memrcached介绍,memcached安装、memcached数据导出和导入、php连接memcached、memcached中存储sessions

21.1 Nosql介绍 21.2 memrcached介绍 21.3 安装memcached 21.4 查看memcachedq状态 21.5 memcached命令行 21.6 memcached数据导出和导入 21.7 php连接memcached 21.8 memcached中存储session......

tobej
07/10
12
0
一脚踏进Memcached的大门

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

甩锅侠
2017/11/11
0
0
服务器后端开发系列——《实战Memcached内存缓存系统》

1、实战Memcached缓存系统(1)Memcached基础及示例程序 内容:建筑Memcached背景知识和入门示例程序。 2、实战Memcached缓存系统(2)Memcached Java API基础之MemcachedClient 内容:以Mem...

晨曦之光
2012/04/24
112
0
Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

一、问题: 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里仅从数据缓存方面考虑,当然,...

商者
2016/03/17
119
0
实战Memcached缓存系统(8)Memcached异步实时读写问题的解决方案SAC

尊重知识,转载请注明本文来自:编程艺术家Poechant的CSDN博客 http://blog.csdn.net/poechant 《服务器后端开发系列——《实战Memcached内存缓存系统》》系列博文:http://blog.csdn.net/po...

晨曦之光
2012/04/24
137
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud 笔记之Spring cloud config client

观察者模式它的数据的变化是被动的。 观察者模式在java中的实现: package com.hxq.springcloud.springcloudconfigclient;import org.springframework.context.ApplicationListener;i...

xiaoxiao_go
今天
4
0
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
今天
4
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
7
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部