【Memcache】Learning From Memcache
1. 内存存储:
Memcache使用Slab Allocaiton内存存储机制:
通常的内存管理方式,对所有记录进行简单的malloc和free会导致内存碎片,所以像Windows将内存分块(chunk), 每个chunk128bype。Memcache将分配的内存分割成各种尺寸的chunk,并把尺寸相同的块分组(chunk的集合)。分配到的内存不会释放,而是重复利用。
- 在Slab中缓存记录的原理:memcached根据收到的数据的大小,选择最适合数据大小的slab。memcached中保存着Slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中。
- 存在的问题:由于分配的是特定长度的内存,因此无法有效利用分配的内存,例如将100字节的数据缓存到128字节的chunk中,剩余的28字节就浪费了。
- 解决之道:使用Growth Factor进行调优
- 使用Growth Factor进行调优:memcached在启动时指定Growth Factor因子(通过-f选项),就可以再某种程度上控制slab之间的差异。默认值为1.25。在该选项出现之前,这个因子曾经是2,称为‘power of 2’,但可以看出在128字节之后,差别比较大。为了尽量减少浪费,所以有了Growth Factor。
- Lazy Expiration:memcached内部不会监视记录是否过期,而是在get时查看记录的Timestamp, 检查记录是否过期,这种技术被称为lazy expiration。所以,memcached不会再过期监视上耗费CPU时间。【在以后的开发中也可以使用这样的技术,不加大cup的消耗】
- LRU: 从缓存中有效删除数据的原理:memcached会优先使用已超时的记录的控件,但实际如此,也会发生追加新记录时控件不足的情况,此时就要使用LRU机制来分配空间。当memcached的内存空间不足时,就从最近未被使用的记录中搜索,并将空间分配给新的记录。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具