首页 > 其他分享 >8.Memcached的工作原理

8.Memcached的工作原理

时间:2022-08-20 16:13:20浏览次数:52  
标签:slab chunk 工作 memcached perslab 原理 Memcached size

8.Memcached的工作原理

 

8.1 Memcached概述

 

Memcached 只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统的memcached 虽然没有像redis所具备的数据持久化功能,比如RDB和AOF都没有,但是可以通过做集群同步的方式,让各memcached服务器的数据进行同步,从而实现数据的一致性,即保证各memcached的数据是一样的,即使有任何一台 memcached 发生故障,只要集群中有一台 memcached 可用就不会出现数据丢失,当其他memcached 重新加入到集群的时候,可以自动从有数据的memcached 当中自动获取数据并提供服务。

 

Memcached 借助了操作系统的 libevent 工具做高效的读写。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥高性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。

 

Memcached 支持最大的内存存储对象为1M,超过1M的数据可以使用客户端压缩或拆分报包放到多个key中,比较大的数据在进行读取的时候需要消耗的时间比较长,memcached 最适合保存用户的session实现session共享。

 

Memcached存储数据时, Memcached会去申请1MB的内存, 把该块内存称为一个slab, 也称为一个page。

 

Memcached 支持多种开发语言,包括:JAVA,C,Python,PHP,C#,Ruby,Perl等。

 

 

8.2 Memcached工作原理

 

8.2.1 内存分配机制

 

应用程序运行需要使用内存存储数据,但对于一个缓存系统来说,申请内存、释放内存将十分频繁,非常容易导致大量内存碎片,最后导致无连续可用内存可用。

 

Memcached采用了Slab Allocator书柜分配机制来分配、管理内存:

 

Page:分配给Slab的内存空间,默认为1MB,分配后就得到一个Slab。Slab分配之后内存按照固定字节大小等分成chunk。

 

Chunk:用于缓存记录k/v值的内存空间。Memcached会根据数据大小选择存到哪一个chunk中,假设chunk有128bytes、64bytes等多种,假如数据只有100bytes,则只能存储在大小为128bytes的chunk中,存在少许浪费。Chunk最大就是Page的大小,即一个Page中就一个Chunk。

 

Slab Class:Slab按照Chunk的大小分组,就组成不同的Slab Class, 第一个Chunk大小为 96B的Slab为Class1,Chunk 120B为Class 2,如果有100bytes要存,那么Memcached会选择下图中Slab Class 2 存储,因为它是120bytes的Chunk。Slab之间的差异可以使用Growth Factor 控制,默认1.25。

 

范例:查看Slab Class

[root@centos8 ~]#memcached -u memcached -f 2 -vv

slab class   1: chunk size        96 perslab   10922

slab class   2: chunk size       192 perslab    5461

slab class   3: chunk size       384 perslab    2730

slab class   4: chunk size       768 perslab    1365

slab class   5: chunk size      1536 perslab     682

slab class   6: chunk size      3072 perslab     341

slab class   7: chunk size      6144 perslab     170

slab class   8: chunk size     12288 perslab      85

slab class   9: chunk size     24576 perslab      42

slab class  10: chunk size     49152 perslab      21

slab class  11: chunk size     98304 perslab      10

slab class  12: chunk size    196608 perslab       5

slab class  13: chunk size    524288 perslab       2

<27 server listening (auto-negotiate)

<28 server listening (auto-negotiate)

 

 

8.2.2 懒过期 Lazy Expiration

 

memcached不会监视数据是否过期,而是在取数据时才看是否过期,如果过期,把数据有效期限标识为0,并不清除该数据。以后可以覆盖该位置存储其它数据。

 

 

8.2.3 LRU

 

当内存不足时,memcached会使用LRU(Least Recently Used)机制来查找可用空间,分配给新记录使用。

 

 

 

8.2.4 集群

 

Memcached集群,称为基于客户端的分布式集群,即由客户端实现集群功能,即Memcached本身不支持集群。Memcached集群内部并不互相通信,一切都需要客户端连接到Memcached服务器后自行组织这些节点,并决定数据存储的节点。

 

标签:slab,chunk,工作,memcached,perslab,原理,Memcached,size
From: https://www.cnblogs.com/biaoming534/p/16607930.html

相关文章

  • 网络编程-综合案例-文件上传原理
    文件上传原理1.【客户端】输入流,从硬盘读取文件数据到程序中。2.【客户端】输出流,写出文件数据到服务端。3.【服务端】输入流,读取文件数据到服务端程序。4.【服务端】......
  • redis集群新增结点slot迁移原理
    redis集群新增结点slot迁移原理写在前面:最近在复习redis知识点,遇到一个问题很疑惑,就是集群新增结点时,是将slot重新分配,然后移动?这样集群节点之间不就需要互相传送数据吗,......
  • MapReduce核心原理
    MapTask运行机制详解MapTask流程详细步骤:读取数据的组件InputFormat会通过getSplits方法对输入目录中文件进行逻辑切片规划得到splits,有多少split就对应启动......
  • monodepth2学习1-原理介绍
    monodepth2介绍monodepth2是在2019年CVPR会议上提出的一种三维重建算法,monodepth2是基于monodepth进行了改进,采用的是基于自监督的神经网络,提出了一下三点优化:一个最小......
  • 手机验证码原理
    表单提交,把手机号码传送到后端;后端拿到手机号码后根据相关算法随机形成一个验证码,并将其保存在数据库;用户拿到验证码后将验证码填写完毕提交后,这时候前端会将用户填写的验......
  • 华为云桌面解读-流畅的原理
    ​ 政企数字化浪潮袭来,从PC时代到虚拟化时代再到如今的云原生时代,云办公已是大势所趋。远程办公、视频会议、数据共享、在线教育、在线医疗、在线政务等逐渐普及,办公的场......
  • 你所需要了解的几种纹理压缩格式原理
    本文基于资料收集,概括了几种纹理压缩格式的基本思想,希望对于学习有所帮助。为什么我们需要纹理压缩格式?例如R5G6B5、A4R4G4B4、A1R5G5B5、R8G8B8或A8R8G8B8等未经压缩......
  • 最速下降法、牛顿法、共轭梯度法原理及对比
    三者都是基于导数的迭代优化方法,用于求解无约束优化问题。代码:https://github.com/321hjd/ImageBed/tree/main/code/NumericalOptimization/derivative-basedOptimizatio......
  • vue响应式原理浅解
    响应式原理是通过Object.defineProperty()结合发布者订阅者模式来实现的,Object.defineProperty(obj,prop,desc)方法用来添加对象属性,并可进行监听其被获取和被修改。obj:需......
  • 工作方法
    目录没有调查就没有发言权找规律,寻求事物本质实践持以乐观积极的态度,永不气馁没有调查就没有发言权事前调研,事倍功半找规律,寻求事物本质凡事都是规律,一定要找到规律实......