Memcached内存管理模型与LRU算法优化

Memcached说明、安装、配置、工具 Memcached是一个高性能、分布式内存对象缓存系统,它主要用于减轻数据库负载,加快动态Web应用的响应速度。通过在内存中缓存数据和对象,Memcached减少了读取数据库的次数,从而提高了动态、数据库驱动网站的速度。 阅读详情

Memcached 采用的是 Slab allocation 内存模型,如下图:
Slab allocation 内存模型
说明:
1、最大内存默认64兆,通过-m调整,内存空间有slab class构成,内存以slab page为单位申请,分配到对应的slab class
2、slab page: 最大1兆,由一个或多个chunk组成
3、chunk: 实际存储数据的单元96字节 ~ 1兆
4、slab class增长的幅度,由增长因子决定 (默认1.25)
5、调整slab的增长因子,根据业务需求调整,进行调优

Memcached LRU 策略

(老版本1.4x之前 用的单链表,碰撞几率太高,导致互斥锁竞争)

新版架构图

在这里插入图片描述
说明:
每个Slab-class安排一个LRU,每个LRU拆分四个LRU类型,每个存储的数据都有两个标志位:FETCHED、ACTIVE

FETCHED: 该数据曾被请求过
ACTIVE: 该数据有两次或两次以上被请求,数据被移动时移除

TEMP: 该队列中的item TTL通常只有几秒,不会被挪动
具体时间可配置 stats settings temporary_ttl选项

HOT: 热点队列,数据不会长久存在此链表,一旦数据达到队尾,则开始移动。如果数据处于活动状态,将被移动到WARM,非活动状态,被移动到COLD

WARM: 访问量不大的数据
如果物品处于活动状态,将被移动到warm头部,非活动状态,移动到COLD

COLD: 最不活跃的数据
回收时如果处于active状态,则移动warm,否则删除

redis内存模型介绍 redis内存模型介绍,redis内存模型介绍 立即下载

相关推荐

后仿之 SDF优先级和相关概念

综上:在后仿中,工具(vcs)看起来对于negative interconnect的处理如下:a. 查看此negative INTERCONNECT语句所对应的destination cell中是否有PORT语句:b. 如果PORT delay的值大于等于INTERCONNECT的绝对值,就从PORT中消耗掉对应的负值。c. 如果PORT delay不够用,就查看destination cell中是否有IOPATH或DEVICEm有IOPATH或DEVICE,并且够用(任意一种够用就行),就消耗掉。

qq_24434431的博客 1108

memcached-1.4.22介绍以及安装

介绍 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。 Memcache是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,

lee的博客 1373

利用Python脚本生成IDA Pro许可证文件idapro.hexlic的完整指南

本文提供了一份详细的Python脚本指南,用于自动化生成IDA Pro的许可证文件idapro.hexlic。文章深入解析了脚本原理,包括构建许可证JSON、RSA密钥修补与签名生成机制,并附有完整的操作流程与常见问题排查,帮助逆向工程人员快速完成本地化许可部署。

weixin_29313547的博客 612

Memcached源码分析 - LRU算法(6)

文章列表: 《Memcached源码分析 - Memcached源码分析之基于Libevent的网络模型(1)》 《Memcached源码分析 - Memcached源码分析之命令解析(2)》 《Memcached源码分析 - Memcached源码分析之消息回应(3) 》 《Memcached源码分析 - Memcached源码分析之HashTable(4) 》 《Memcach

自娱自乐的代码人 5012

论文必备 - YOLO26统计数据集中大、中、小目标数量,附完整代码和详细使用步骤

数据集是由微软开发维护的大型图像数据集。数据集标注类型对应任务包括物体检测、关键点检测、实例分割、stuff分割(没有特定形状的物体),全景分割人体关键点, 人体密度检测等。官网数据规模和样本特点数据规模大:总共包含32.8万张图像)。其中标注过的图像超过 20 万张,拥有 150 万个目标实例,数据量丰富,能够为模型训练提供充足的信息。类别丰富:包含80个目标类别和91个“stuff”类别。目标类别涵盖了日常生活中常见的各种物体,如人、动物、交通工具、生活用品等;stuff。

Limiiiing的博客 264

基于反事实的因果推理Causal inference based on counterfactuals--一万六千字文献详细解读(因果关系的推理应用)【全文总结】

基于反事实的因果推理Causal inference based on counterfactuals--一万六千字文献详细解读(因果关系的推理应用)【全文总结】---来自一位即将入学的准研一,也希望这篇文章能够激励自己不断走下去!!

qq_46044325的博客 4442

memcached的LRU部分

LRU部分的功能介绍 LRU部分的整体逻辑 LRU部分的代码分解 1、start_lru_maintainer_thread函数,; int start_lru_maintainer_thread(void) { int ret; pthread_mutex_lock(&lru_maintainer_lock); do_run_lru_maintainer_t

fusan2004的博客 1664

检测头篇 | 手把手教你如何去更换YOLOv8的检测头为ASFF_Detect

自适应空间特征融合(ASFF)的主要原理旨在解决单次检测器中不同尺度特征的不一致性问题。具体来说,ASFF通过动态调整来自不同尺度特征金字塔层的特征贡献,确保每个检测对象的特征表示是一致且最优的。本文所做出的改进是将YOLOv8的检测头更换为ASFF_Detect。🌈

小哥谈 2497

Memcache内存机制与LRU

memcache的内存分配机制:memcache进程会预先分配一部分内存给slab,给slab分配的内存也叫page(page的默认大小是1M),每个page下面会有若干个chunk(chunk默认大小96B),而数据就会封装成item存储在chunk里面,若干个大小相同的chunk称为slab class,相同大小的chunk未必在一个slab中。所以在默认情况下一个slab存放的chunk数量...

wongcony的专栏 1007

如何在非序列模式下使用类似图像模功能

如何在非序列模式下使用类似图像模功能

weixin_72050316的博客 552

【算能】TPU 指令集架构深度解析

TPU指令集以领域专用性与数据流驱动为核心,通过精简指令集、硬件固化逻辑与高并行架构,实现张量计算的极致性能。开发者通常无需直接编写指令,但理解其设计原理对性能调优(如内存布局优化、指令调度)至关重要。算能TPU通过开放指令描述与编译器工具链,为垂直行业提供了更高灵活性的定制空间,而谷歌TPU则依赖编译器的全自动化优化,更适合大规模标准模型部署。未来,随着稀疏计算、光子计算等技术的引入,TPU指令集将进一步向高能效与高泛化性演进。

浩瀚之水的专栏 1182

Memcached之Slab、hash、LRU、items详解

Slab Hash

一个菜鸟的博客 2237

Unity内存优化:从崩溃到流畅的终极指南

Emscripten 为 WebAssembly 设定的内存布局(Static、Stack 和 Heap)为开发者提供了一个清晰的内存管理框架。理解这些内存区域的特性和用途,有助于开发者在 WebGL 项目中更有效地管理内存,优化性能,减少内存使用峰值。在 Unity WebGL 中,Dynamic Memory 是 UnityHeap 的主要组成部分,负责存储游戏运行时所需的各种数据。Dynamic Memory 主要分为两类:Managed Memory 和 Native Memory。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 358

从卡顿到丝滑:Memcached 1.4至1.6迁移实战指南

你是否正面临Memcached缓存命中率低下、大key处理困难、高峰期性能波动等问题?从1.4升级到1.6版本不仅能解决这些痛点,还能获得TLS加密、智能LRU算法等企业级特性。本文将带你零风险完成迁移,文中所有配置和代码均来自官方仓库真实文件,可直接参考实施。 ## 核心改进速览 Memcached 1.6带来四大突破性提升: | 特性 | 1.4版本 | 1.6版本 | 配置文件 | |-...

gitblog_00194的博客 786

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Memcached哈希性能优化(八)——总结报告

转自:http://m.blog.youkuaiyun.com/blog/hzwfz1989/39120005 Memcached哈希性能优化报告 一、 Memcached分析 这两个月一直在memcached优化和找工作之间忙着,一边复习一边优化改代码还真是个让人觉得难以忘记的夏天。做这个项目确实收获了很多,不管是对Linux的系统的认识,还是对memcached的认识都比以前

火侬智能科技 558

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

memcached源码分析之四

还是从Memcached.c文件的main函数开始,逐步分析Memcached的实现 if (!sanitycheck()) { return EX_OSERR; } static bool sanitycheck(void) { /* One of our biggest problems is old and bogus libevents */

The Coding World 673

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

「Redis」Redis面试全攻略:常见问题与高级技巧解析

Redis面试全攻略:常见问题与高级技巧解析

技术路上的探险家 385

Memcached

摘要:Memcached是一种高性能分布式内存键值存储系统,核心原理基于Slab内存分配和LRU淘汰机制。关键技术点包括:1)使用Slab Allocator预分割内存(64B/128B等Chunk)防止碎片;2)基于一致性哈希实现分布式定位;3)采用多线程架构支持高吞吐。数据存储结构为Item对象,包含键值及元数据,通过哈希表实现O(1)查询。相比Redis,Memcached专注简单缓存场景,支持百万级QPS但缺乏持久化功能。优化策略包括监控剔除率、调整Slab分布、启用LRU扫描器等。

Java_soul_GJH的博客 1134

memcached 1.2 内存模型图

参考了以下资源和 memcached-1.2.5的源代码,画了一个memcached模型图,作为下面资源的补充。slab内存模型的优点(减少碎片,速度快)和缺点(有空间浪费)下面的链接里面都有讲,Tim也没有什么新观点,就不重复了。参考资源:Current memcached memory management:http://lists.danga.com/pipermail/memcac

半道出家的和尚 1133

LRU算法介绍、优化、使用场景(Redis、MySQL、Memcached)

是的

Kindle_code的专栏 3521

Memcached之你真正理解LRU吗(4)

众所周知,Memcached使用的是LRU(Least Recently Used最近最少使用)算法来回收缓存,将那些属于LRU的数据移出内存,从而腾出空间来加载另外的数据。那么Memcached的最近最少使用算法是怎么实现的呢?也许很多人都会回答:不就是在内存满了的情况下,把最近最少使用的Key替换掉,然后插入新的Key-Value键值对吗?其实不然,下面我们来深入的分析Memcached的LR...

qianshanding0708的博客 6577

从缓存雪崩到性能飞跃:Memcached LRU算法的进化之路

你是否曾遇到过这样的困境:明明缓存命中率很高,系统却频繁出现缓存雪崩?明明增加了服务器内存,性能提升却微乎其微?这很可能是传统LRU(最近最少使用)算法在高并发场景下的"缓存污染"问题。本文将深入解析Memcached如何通过分段LRU(Segmented LRU)架构解决这一痛点,以及如何通过简单配置获得30%以上的性能提升。 读完本文你将掌握: - 传统LRU算法在缓存系统中的三大缺陷 - ...

gitblog_00701的博客 1031

Memcached内存管理机制原理

Memcached 作为一个内存缓存系统,需要高效管理内存资源,以便存储大量的缓存对象,并且在内存不足时合理地释放空间。Slab Allocation(分片分配):这是 Memcached 的核心内存管理机制,用于避免内存碎片化,并高效地管理内存分配。Chunk(内存块):每个 Slab 是由多个大小相同的 Chunk 组成的,每个 Chunk 用于存储一个缓存对象。Item(缓存对象):Memcached 中存储的键值对数据,即缓存对象,被称为 Item。

Flying_Fish_roe的博客 953

【Memcached】一文详解 Memcached

Memcached 是一个开源的,支持高性能,高并发的分布式内存缓存系统,由 C 语言编写,总共 2000 多行代码。从软件名称上看,前 3 个字符Mem就是内存的意思,而接下来的后面 5 个字符cache就是缓存的意思,最后一个字符d,是daemon的意思,代表的是服务器端守护进程模式服务。

Data · Model · Agent · Repeat 9952

Memcached的LRU算法

前言 今天面试被新浪一个很帅的师兄问到了memcached的LRU源码实现,结果我扯了一堆如何用redis实现LRU替换算法,唉,学艺不精啊 原文链接:Memcached的LRU算法 LRU算法 LRU是Least Recently Used最近最少使用算法。源于操作系统使用的一种算法,对于在内存中但最近又不用的数据块叫做LRU,操作系统会将那些属于LRU的数据移出内存,从

小一的专栏 5602

memcached内存管理

memcached内存分配策略, 使用slab allocator方式来分配内存。 memcached启动时,通过-m参数来指定占用总内存的大小。 总内存会被切分成一个个pages,默认一个page大小为1M。

yonggang7的专栏 1391
上一篇: Elasticsearch 集群基本概念
下一篇: 高并发之请求合并
Kindle_code
博客等级 码龄12年 21粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值